sqlmap可谓是sql注入探测的神器,但是利用sqlmap测试SQL注入的效率很低,每一个url都需要手动测试。sqlmap的开发者新加了sqlmapapi.py,可以直接通过接口调用来操作,简化了sqlmap命令执行方式。
但在使用中遇到一些问题,边看源码边解决,稍微总结几点吧。
1、option设置
在网上查看很多资料,都是按照下面这种方式写options的,而且运行起来也没有报错,有时也能扫到漏洞,其实这么设置options没有起到作用,通过给源码添加日志可以看出是将options作为一个key项赋值了。而能扫出漏洞仅仅是因为,sqlmap的option有默认值,并没有按照自已定义的值来扫描。
image.png
划重点:正确的赋值方法,如下图。
image.png
2、启动扫描之post类型
2.1、sqlmapapi进行get请求注入时,不需要单独传参;post请求就需要单独传参了。传参方式就是在调用scan_start时,payload多加一个data参数,入下图:
image.png
2.2 post的另一个问题也就来了,data参数格式必须是param1={param1}¶m2={param2}¶m3={param3}...格式,通过学习源码才知道,原因是:sqlmap发送请求用的是 urllib2.Request(url, data, headers),这个方法的post的data用的是application/x-www-form- urlencoded数据格式。所以,调用传参是需要额外转化一下格式。提供转化方法如下:
from urllib import parse
def get_param(params):
paramdata = parse.urlencode(params)
# print(paramdata)
return paramdata
使用过程遇到问题再来更新。