目錄
- 結束語
打開題目,點擊進入鏈接

有一個提示,要求改變key的值和哈希值,查看源代碼

提示\(hash=md5(\)sign.$key);the length of $sign is 8
解密key=123對應的哈希值:kkkkkk01123
所以sign=‘kkkkkk01’
然后就好說了,改變key=321,md5加密'kkkkkk01321' 傳入

提示下一步,訪問Gu3ss_m3_h2h2.php

好家伙,代碼審計一波
demo類里有一些魔法函式,聯想到反序列化漏洞
get傳入引數var,先base_64解碼,然后preg_match正則過濾,
/[oc]:\d+:/i \d 是匹配一個數字,+是一個或者多個
最后反序列化var,還提示 the secret is in the f15g_1s_here.php
反序列化漏洞詳解參考:
反序列化漏洞
所以我們需要傳入var來訪問f15g_1s_here.php這個東西:
1.修改file屬性為f15g_1s_here.php,序列化物件
2.base_64編碼
但是有一個問題,反序列化是會先檢查有沒有__wakeup()函式,如果有會先執行wakeup函式,__wakeup()函式會改變file的值,所以必須繞過__wakeup()函式
魔法函式wakeup繞過
改變步驟:
1.修改file屬性為f15g_1s_here.php,序列化物件
2.改變序列化字串的屬性數目大于實際(繞過__wakeup)
2.base_64編碼
再接著想,反序列化之前還有一次過濾呀~~還得繞過
正則匹配到‘O:4’就會報錯,怎么繞過呢~ 把4變成+4就可以
改變步驟:
1.修改file屬性為f15g_1s_here.php,序列化物件
2.改變序列化字串的屬性數目大于實際(繞過__wakeup)
3.替換‘O:4’為‘O:+4’
2.base_64編碼
步驟有了,腳本實作一下~
<?php
class Demo
{
private $file = 'f15g_1s_here.php';
}
$x = new Demo;
$c = serialize($x);
$c = str_replace('O:4','O:+4',$c);
$c = str_replace(':1:',':2:',$c);
$d = base64_encode($c);
echo ($d);
?>
把跑出來的var傳參得到f15g_1s_here.php的原始碼

再看代碼,,
需要get傳參val;后面又有一個eval函式,addslashes對val進行了轉義
又是考繞過,如果沒有轉義函式的話,可以構造
val = ${eval(echo `ls`;)}
#ls反引號括住
但是addslashes轉義了,可以考慮把echo命令變成變數繞過
val=${eval($_GET[a])}&a=echo `ls`;
傳參后得到目錄檔案True_F1ag_i3_Here_233.php

修改命令cat True_F1ag_i3_Here_233.php

什么都沒有,,查看原始碼

拿到flag:flag{64402796-e35d-4fef-8432-ebdfb459a157}
知識點:
1.hash
2.反序列化
3.命令執行
結束語
熬過無人問津的日子,才有詩和遠方
本文來自博客園,作者:{花城1122},轉載請注明原文鏈接:https://www.cnblogs.com/huacheng1122/p/15331168.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/302657.html
標籤:其他
下一篇:代碼審計之phpweb測驗
