0×01 前言
SQL注入,这个类型的漏洞我真的学了好久好久好久好久,即是我刚刚开始接触安全就学习的第一种漏洞,也是一个迄今为止还在学习的漏洞类型,只能说,感觉自己还是有很多还是不会的。从一开始的手工一个网站一个网站去测,到之后的用google hacking的方法去找可疑链接,再到后面用sqlmap批量检测。也是经历了至少半年的时间。今天才写了个调用sqlmapapi的脚本,想跟大家分享一些走过的坑和思路。
0×02 SQL注入批量测试的几种方法
本文的目的在于通过看别人的代码来学习原理,同时也掌握自己造轮子的能力。这里只是列举了我自己平时用到的几种方法,当然网上能找到更多更好的工具,或者更好的思路,都是值得学习的。
下面就列举三种方法是:sqliv、sqlmap -m、sqlmapapi。
1.1 sqliv
1.1.1 下载地址:
【https://github.com/Hadesy2k/sqliv】
1.1.2 说明:
作者是Hadesy2k,可以看到作者大大更新还是挺勤快的,写这文章的日期是11月23日(文章第一版)(第二版已经是12月28日),从图里可以看出作者在月初的时候更新了一波。
而更之前在10月份的时候我看了一遍这个代码,发现作者在检测sql注入点的时候只是在参数值后加了个单引号,然后检测返回页面的报错信息。以这种方式去测试当然会遗漏很多呀。而且如果一个链接后跟多个参数,同时在所有参数值里加单引号。我头上直冒汗。
在【src/scanner.py】里可以看到这一句: 【website = domain “?” (“&”.join([param payload for param in queries]))】
每个参数值加payload后组合一起,现在依然是这种方式。
在11月初更新一波后,可以看到payload不再是只有单引号了,还有了很多其它的如括号,分号等。
这个是lesson是没有注入的,参数内容改变的话会影响页面返回结果,所以正确的方法应该是单独给每个参数的内容加payload进行测试。
我自己改了下,变成分别单独测试所有参数值,有需要的话。大家可以去我的github【https://github.com/Martin2877/sqliv-M/blob/master/src/scanner.py】看。
值的高兴的是,作者把检测POST请求放在他的【To Do】里了,期待。
(而当我12月28号再去看的时候,作者又更新了许多,还加入了docker更方便部署。点个赞。)
1.1.3 多地址
因为sqliv本身是没有多地址批量的,所以我们自己写一个咯,还是比较简单的,见下图,代码也在我的github里
1.2 sqlmap -m
1.2.1 下载地址:
【https://github.com/sqlmapproject/sqlmap】
1.2.2 说明:
神器sqlmap,不多说,-m模式,就是用来批量测试url的,不过是单线程,比较慢,效果比sqlmapapi好。
使用命令:
代码语言:javascript复制python sqlmap.py -m urls.txt --batch
1.3 sqlmapapi
1.3.1 下载地址:
【https://github.com/Martin2877/sqlmapapi-M】
1.3.2 说明:
api模式有多线程,先通过sqlmap根目录中的sqlmapapi.py启动服务:
【python sqlmapapi.py -s】
然后到sqlmapapi-M根目录下,在【url.txt】中写你要批量测试的地址:
然后使用命令执行批量扫描:【python sqlmapbatch.py】
效果如图,而其关键代码如下:
这里设置了超时时间是4秒,然后测下一个,大家也可以设置更久一点,效果也会更好。我这里没有做队列什么的,大家可以自己改哈。
0×03 爬取链接
当然上面几种方法都需要用到url.txt,针对这个我另外写了一个爬虫工具,见【https://github.com/Martin2877/FindLinks】,是爬取一个网站下链接的工具;网上还有很多能通过搜索找可能有sql注入的网站,这里就不多描述啦。
0×04 总结
总结一下,上面所列的几个工具或方法效果最好的当然是【sqlmap -m】,因为没有“超时”,一个地址会一直测到完为止,所以测的时间真的很久,测一天的话也就只能有500个地址吧。而这里slqmapapi因为设置了超时,所以会快很多,不过效果没有那么好。以后加了队列应该就能顾及两个方面的问题。而sqliv相对来说比较快,因为只是加payload看返回是否有数据库报错(也是其缺点),当然可以改代码变成加载payload字典的方式去测,也算是不错的一个工具。