1. 程式人生 > >賽博地球杯線下賽WEB_RCE Write_up

賽博地球杯線下賽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:

這裡寫圖片描述

這裡寫圖片描述