安恆2023年12月月賽wp web部分

2021-09-05 08:45:58 字數 2050 閱讀 9777

試試訪問admin.php,之後頁面顯示「you are not admin…」,因為題目並沒有登入功能,猜測可能要對cookie做點文章來偽裝成admin。用burp抓包看請求頭如下:

發現user欄位,把值解base64得user(%3d是『=』的url編碼,解碼的時候記得把%3d換成=),根據這個思路,就把admin進行base64後替換原來的值,但是發現還是一樣的顯示「you are not admin…」。

這裡卡了好久,後來清空cookie重新整理思路,發現當訪問admin.php時如果沒有cookie,他會給我們set phpsessid欄位的cookie,此時並沒有set user欄位的值,僅僅是給我們了乙個phpsessid

於是訪問index.php通過抓包發現是在訪問index.php的時候set了user欄位。

於是猜測index.php有檢查cookie中user欄位的動作,於是改user的值為admin的base64,之後發現頁面被重定向到admin.php,此時就沒有提示「you are not admin…」。

檢視原始碼可以看到表單post了cmd欄位,猜測這裡是命令執行,於是post了cmd=ls過去試試,看到 ls 命令被執行了

但是沒有看到flag,猜測flag在伺服器根目錄,想 ls / 檢視根目錄下的檔案,發現直接報了error,猜測可能某些字元被過濾了,經過測試發現空格過濾了,於是先用 < 頂替 如下:

檢視到了admin.php的內容,檢視config.php

看到過濾了;&>{}%#?!@+還有空格,之後想辦法怎麼繞過這個過濾,找了幾個姿勢,最後用$ifs代替空格,

然後就可以愉快的拿到flag了。

訪問題目直接看到原始碼,看**,需要我們傳入data引數,然後經過 preg_match(』/[oc]:\d+:/i』,$data,$matches);函式進行過濾,之後進行反序列化操作。我們需要構造file屬性為flag.php的物件,然後將它的反序列化後的字串最為data傳入,因為__tostring()這個魔法方法會在物件被當做字串時觸發,於是echo $good時就會自動呼叫物件中的__tostring()方法,從而讀取flag.php檔案。

<?php 

class

baby";

if(file_get_contents

($filename))

}}}if

(isset

($_get

['data'])

)else

}else

?>

注意使用時記得進行url編碼,否則+號會被當成空格,還要注意php7和php5的區別,php7用+號繞過時會報錯無法反序列化,只有php5可以這樣。

web題算是比較基礎,做的時候給選手的思路很清晰,至少沒有那些無聊的腦洞。

安恆月賽 2023年12月

沒啥好說的,什麼牛不能跑?蝸牛 題目 解題思路 拿到題目後,掃了一波 發現 admin.php 進入檢視,顯示無法進入 檢視頁面資訊,發現user登入資訊,在儲存值可更改。將其先進行url decode,dxnlcg 然後,base64 decode,user。然後,考慮到admin登入,於是將ad...

2018安恆杯12月月賽復現

萌新因為種種原因沒有做安恆12月的月賽題,正巧這幾天發現復現,又學到了新知識!題目index.php給出原始碼 error reporting 1 include flag.php class baby if file get contents filename if isset get data ...

安恆杯12月月賽

這次的月賽可以說非常適合我這種菜雞做了請求包中發現乙個user base64 解碼得到user,構造admin 然後base64提交 發現跳轉到後台admin.php 試了乙個ls發現有回顯,應該是個命令執行漏洞 構造 cmd ls ifs 成功回顯 然後讀取flag cmd cat ifs ffl...