這次參與賽博地球杯線下賽出題,看到巨佬們強還是強啊,先膜一下,然後獻上自己的出題思路,萌新出題,輕噴 !!!
第一步、登錄
查看網站發現網站無法登錄,並且根據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: