賽博地球杯線下賽WEB_RCE Write_up
這次參與賽博地球杯線下賽出題,看到巨佬們強還是強啊,先膜一下,然後獻上自己的出題思路,萌新出題,輕噴 !!!
第一步、登入
檢視網站發現網站無法登入,並且根據robots.txt能發現hint.php和hack.php
不過可以注意到cookie中存在isLogin=0,設定cookie,isLogin=1,發現成功登入
第二步、檔案包含
成功登入,發現一個管理頁面admin/admin.php?file=index&ext=php,推測存在檔案包含,可以發現存在過濾,不過可以繞過,訪問
admin/admin.php?file=….//….//….//….//….//….//etc/passwd&ext=
可以成功包含檔案
不過嘗試hint.php會發現是檔案包含,不能顯示原始碼,偽協議也無法使用
第三步、審計nginx配置
不過可以讀取一些配置檔案,比如讀取nginx配置檔案
admin/admin.php?file=….//….//….//….//….//….//etc/nginx/sites-enabled/default&ext=
可以發現配置檔案中存在問題
存在一個location是/web-img,使用alias指向了/images/,不過location的後面沒有/,alias的後面有斜槓,存在隱患
訪問/web-img../,發現列出了根目錄
由於這個location不解析php,
訪問/web-img../usr/share/nginx/html/hint.php獲得flag的重要資訊
hint.php中提示我們flag存在於FLAGFLAGFLAGFLAG.pcapng中,我們嘗試訪問/web-img../usr/share/nginx/html/FLAGFLAGFLAGFLAG.pcapng發現403 forbidden,無法獲取FLAGFLAGFLAGFLAG.pcapng。這裡我們有兩種方式獲取FLAGFLAGFLAGFLAG.pcapng。
一種是通過檔案包含對FLAGFLAGFLAGFLAG.pcapng原始碼資料包進行分析:
訪問:/admin/admin.php?file=….//FLAGFLAGFLAGFLAG.pcapng&ext=得到資料包原始碼
第二種是利用題目中給的hack.php的webshell進行連線,下載資料包進行檢視。這裡主要說明第二種方式:
第四步、根據hack.php進行webshell連線RCE
最初robots.txt還提示了我們一個hack.php,我們根據上面資料包分析也可以發現hack.php就是利用weevely生成的webshell,
通過最前的方法,下載hack.php,檢視hack.php,我們可以看到webshell加了混淆和替換,將這些混淆替換掉,就可以看到webshell的原始碼了,
利用weevely連線webshell,但是我們發現原始碼中並沒有給我們weevely連線的密碼,但是原始碼中有兩個變數$kh="42f7"
和$kf="e9ac"
審計weevely原始碼,我們會知道weevely生成的webshell進行連線時密碼的驗證方式是將我們輸入的密碼進行md5加密然後取md5加密後的字串後8位,即就是我們原始碼中的42f7和e9ac
所以在我們不知道連線密碼的時候,我們可以直接修改weevely原始碼,強行讓他的share_key等於我們的webshell的42f7e9ac然後不論我們輸入什麼密碼都可以直接連線webshell
成功RCE
第五步、資料包分析
成功連線shell,利用weevely的file_download命令下載FLAGFLAGFLAGFLAG.pcapng資料包。
檢視資料包,跟蹤tcp流,我們可以看出這是weevely的資料包,題目提示,flag在資料包中,所以我們需要解密這個webshell。
第六步、weevely原始碼分析
從github中下載weevely3並分析weevely3的原始碼,我們可以知道weevely執行命令操作的加密方式
根據這個加密函式,編寫自己的解密方法,直接解密得到flag: