SSRF攻擊-運用gopher協議構造POST包--emmmm(http://10.112.68.215:10004/index.php?action=login)


    還是天樞的一道CTF題,啟程!
 
    分析題目,自己注冊賬戶並登陸后,提示輸入一個url,網站會自己運行查找網頁信息。

 

    emmmmm,很挑釁,網站就當作服務器,我們在url框中輸入一個偽造的執行代碼,讓他運行獲取到機密信息,哼哼。這就是SSRF(服務端請求偽造),偽造的代碼留給服務端自己執行並返回我們需要的機密信息。
    在里面亂輸入了一些東西,沒有任何反饋。此時,我們就要掃描網站啊。
 
1.掃描網站+分析robots.txt
    使用御劍掃描網站。眼尖得很,看到了“robots.txt”文件。
    robots.txt是一個純文本文件,它會告訴引擎搜索器哪些資源能搜索,哪些不能。語法如下:
User-agent: * 星號說明允許所有搜索引擎收錄
Disallow: index.php? 表示不允許收錄以index.php?為前綴的鏈接,比如index.php?a=12
Disallow: /tmp/ 表示不允許收錄tmp目錄及其里面的文件,如/tmp/1.html
    來,愉快地查看robots.txt。如下圖所示

 

    嗯呢,不讓搜索這倆東西,那就看這倆里面有啥好東西。
 
2.分析隱藏文件/backup/*和phpinfo.php
    在backup/里面看到一個sql文件,emmmmmmmm,或許存儲了有關用戶的信息。打開看看。

 

    看到了,用戶名和密碼。yeeah

 

    嘗試登陸。有了提示信息,限制了登錄的IP和端口。
 

 

    回想到前面的url框,可以在用已注冊用戶登錄后,在url框中輸入偽造的網頁登錄信息,從而成功用admin用戶登錄。
 
    第二個隱藏文件phpinfo.php一定隱藏了什么重要的東西。看看

 

    gopher擴展件是啟動着的。它是什么?
    Gopher是Internet上一個很有名的信息查找系統,它將Internet上的文件組織成某種索引,很方便用戶獲取。Gopher協議使得Internet上的所有Gopher客戶程序能夠與已注冊的Gopher服務器對話。
    它的使用格式是 gopher://URL。
    在SSRF中經常會使用Gopher來構造POST包攻擊應用。
 
3.使用Gopher協議構造POST包
    Gopher協議沒有默認端口,需要制定POST方法,回車換行使用%0d%0a,參數之間的分隔符也用URL編碼,其他與HTTP協議類似。
    本題中,先根據HTTP協議,構造的結果表示按照要求登錄admin用戶,如下:
gopher://127.0.0.1:80/_POST /index.php?action=login HTTP/1.1
Host:127.0.0.1:1000
Cookie:PHPSESSID=1f546328759632456215236845122365;
Connection:close
Content-Type:application/x-www-form-urlencoded
Content-Length:null
Transfer-Encoding:chunked
 
username=admin&password=bupt666
    其中,必須要有Content-Type,它有兩種值:“ application/x- www-form-urlencoded”和“ multipart/form-data”,它主要用於傳輸參數。如果沒有它,參數就不能正常傳輸。
              這里phpsessid模仿訪問此網站獲得的phpsessid隨機制作一個即可。例如,此處隨機訪問網站,

 

    獲取到的phpsessid是8ef96c599289cae82a714af4afafc793,模仿寫出一個數位一樣的當做phpsessid,可以是1f546328759632456215236845122365。
    經過多次URL編碼的結果為:
gopher://127.0.0.1:80/_POST%20%2findex.php%253Faction%3Dlogin%20HTTP%2f1.1%250d%250aHost%3A%20localhost%3A1000%250d%250aCookie%3A%20PHPSESSID%3D1f546328759632456215236845122365%3B%250d%250aConnection%3A%20close%250d%250aContent-Type%3A%20application%2fx-www-form-urlencoded%250d%250aContent-Length%3A%2031%250d%250a%250d%250ausername%3Dadmin%26password%3Dbupt666
    此處有些地方經過了多次URL編碼,我實在看不出來奧妙,這是個問題,估計要很深的功底才能辦到。
    
4.利用POST包登錄admin賬戶獲取flag
    此處的邏輯是,首先使用已注冊普通用戶登錄,在【URL】框中輸入POST包,此時POST包中的phpsessid成為admin用戶的phpsessid,里面儲存了admin用戶的所有登錄信息。根據題目本身可知,在登陸界面因為IP和端口的限制不能直接登錄admin用戶,所以先登錄普通用戶,攔截普通用戶的一個請求包,將它的phpsessid修改為admin用戶的phpsessid,這樣就繞過了登錄時的攔截,將普通用戶替換為admin用戶登錄,成功獲得flag。

 

    點擊【Forward】,又返回信息,說明跳轉頁面成功,admin賬戶成功登錄了,那個phpsessid已經成為admin用戶的唯一標識。如下圖所示

 

    之后隨便登錄一個已注冊用戶,將admin用戶的唯一標識phpsessid輸入進去,即可獲得flag。如下圖所示、

 

    點擊【Forward】,獲得flag。
 

 

 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM