萌新因為種種原因沒有做安恆12月的月賽題,正巧這幾天發現復現,又學到了新知識!
題目index.php
給出原始碼:
<?php
@error_reporting(1
);include
'flag.php'
;class
baby";
if(file_get_contents
($filename))
}}}if
(isset
($_get
['data'])
)else
}else
?>
這題一開始沒看懂到底是啥意思,一開始定義了乙個baby類,然後在下面完全沒有用到有關這個類的任何東西,所以身為萌新的我一臉矇圈…後來經過仔細地閱讀**,大量的查閱資料,現了其中的貓膩…
分析:
**一開始包含檔案flag.php
;
然後定義了乙個類,類成員變數$file
,重寫__tostring()
方法,這個方法就是將以$filename
為檔名的檔案輸出;
接著對data
進行正則匹配preg_match('/[oc]:\d+:/i',$data,$matches)
,匹配結果放入$matches
,匹配成功就die('hacker!')
,不成功就對輸入的$data
進行反序列化並輸出;
解題方法:
其實這個題理解了以後就不難了,目標是輸出flag.php
的內容,所以構造的data
肯定也與包含的檔名相關;
先對flag.php
進行序列化並輸出,指令碼如下:
<?php
class
baby";
if(file_get_contents
($filename))
}}}$a
=new
baby()
;$a->
file
='flag.php';$b
=serialize($a
);echo($b
);?>
***測試結果輸出:***o:4:"baby":1:
直接get這個值會匹配正規表示式,所以就要想辦法繞過;
繞過方法:該函式設計的初衷是為了不讓object
型別被反序列化,然而正則不夠嚴謹,我們可以在物件長度前加乙個+
號,即o:4 -> o:+4
,即可繞過這層檢測,從而使得我們可控的資料傳入unserialize
函式;
構造如下:o:+4:"baby":1:
將這個字元傳入unserialize
函式以後會直接反序列化出乙個baby
的物件$good
,$good->file
是flag.php
,反序列化後會直接預設呼叫魔術方法__tostring()
輸出檔案內容;
所以歸根結底還是乙個正則繞過+反序列化的問題,將構造的data
經過url編碼以後get進去即可得到flag;(不知道為啥直接在瀏覽器裡傳參沒用,所以就用bp構造get了一下)
這題拿到以後沒有切入點…老辦法…掃一波目錄,發現admin.php
和config.php
進入admin.php
發現you are not admin…
,基本定下思路就是偽造管理員身份登入,檢視請求頭中的資訊發現cookie的user=dxnlcg%3d%3d
推測為base64編碼,解碼為user
要求以管理員身份登入,於是偽造user
為admin
,base64編碼一下修改cookie的值為ywrtaw4=
;重新整理網頁後發現進入了如下介面;
輸入ls
發現回顯;
輸入ls /
想檢視根目錄報錯error
,輸入cat admin.php
報錯,設想是過濾了空格,google了一下空格的繞過方式如下:ifs的預設值為:空白(包括:空格,tab, 和新行)
用$
嘗試繞過,輸入ls$/
,發現回顯中有flag資訊:
直接cat$/fflag_404
得到flag:
事後想檢視admin.php和config.php的內容,發現$
無效,於是嘗試<>
成功,直接cat<>admin.php和config.php
即可;
admin.php
<?php
include
'config.php';if
(!isset
($_session
['admin'])
||$_session
['admin'
]===
false)if
(@$_post
['cmd'])
else
}else
include
'./templates/admin.html'
;
config.php
<?php
session_start()
;function
waf_exec
($str
)|
發現確實用waf_exec()
函式過濾了空格,>,
等一系列符號,但是沒有過濾< / $
,所以可以直接用《和$ifs
繞過即可;
得到的編碼為base32,直接解碼md5一下即可
安恆杯12月月賽
這次的月賽可以說非常適合我這種菜雞做了請求包中發現乙個user base64 解碼得到user,構造admin 然後base64提交 發現跳轉到後台admin.php 試了乙個ls發現有回顯,應該是個命令執行漏洞 構造 cmd ls ifs 成功回顯 然後讀取flag cmd cat ifs ffl...
安恆2023年12月月賽wp web部分
試試訪問admin.php,之後頁面顯示 you are not admin 因為題目並沒有登入功能,猜測可能要對cookie做點文章來偽裝成admin。用burp抓包看請求頭如下 發現user欄位,把值解base64得user 3d是 的url編碼,解碼的時候記得把 3d換成 根據這個思路,就把a...
安恆月賽 2023年12月
沒啥好說的,什麼牛不能跑?蝸牛 題目 解題思路 拿到題目後,掃了一波 發現 admin.php 進入檢視,顯示無法進入 檢視頁面資訊,發現user登入資訊,在儲存值可更改。將其先進行url decode,dxnlcg 然後,base64 decode,user。然後,考慮到admin登入,於是將ad...