BUU-Web-Easy Calc
第一步:對(duì)題目進(jìn)行簡(jiǎn)單的分析

訪問后,可以通過源碼發(fā)現(xiàn)是通過encodeURIComponent對(duì)內(nèi)容編碼后發(fā)送到calc.php內(nèi)

????encodeURIComponent

簡(jiǎn)而言之就是對(duì)發(fā)送的字符串進(jìn)行urlencode編碼
如【?】就變成了【%3F】
可以使用在線的urlencode/urldecode工具,也可以使用Python或者其他的語言進(jìn)行加/解密
訪問calc得到源文件

我們可以發(fā)現(xiàn)其中的函數(shù)
show_source:???highlight_file的別名,作用都是?將__FILE__中的內(nèi)容顯示出來,就是我們看見的這個(gè)源代碼

foreach:????將$blacklist中的內(nèi)容依次取出 作為$blackitem

preg_match:????對(duì)目標(biāo)進(jìn)行正則匹配



“.”的作用是拼接前后內(nèi)容,拼接后就是/$blackitem/m
/[content]/m,不對(duì)大小寫敏感
eval:????執(zhí)行收到的php指令

第二步:漏洞測(cè)試
在這個(gè)地方卡了好久,最后查閱WriteUP發(fā)現(xiàn),WAF和我們現(xiàn)在看見的源文件不是同一個(gè)文件。
這里是一個(gè)PHP解析漏洞,利用PHP對(duì)URL獲取的$_GET/$_POST以數(shù)組存儲(chǔ)時(shí)會(huì)先進(jìn)行一次轉(zhuǎn)換如【?test=23333】會(huì)轉(zhuǎn)換為【Array(['test'] => 2333)】
我們可以使用parse_str來模擬url解析的過程

這里我們可以看出在urlcode為[20,26,00,3d]時(shí)會(huì)刪去,為[20,2b,2e,5b,2f]會(huì)轉(zhuǎn)化為“_”
因此我們可以構(gòu)建payload
【?%20num=var_dump(scandir(chr(47)))】查看根目錄,因?yàn)椤?" ”和“ / ”被過濾了,所以我們這里使用chr函數(shù)對(duì)ascii碼進(jìn)行編碼繞過

可以獲取到根目錄下存在f1agg文件
然后構(gòu)建payload【?%20num=var_dump(file_get_contents(chr(47).f1agg))】
最終拿到flag

最后調(diào)用的幾個(gè)函數(shù)
chr?([ascii_code]):????將ASCII碼轉(zhuǎn)化為字符
scandir( [path] ):列出指定[path]路徑下的文件和目錄
var_dump:????將Arry類型的內(nèi)容取出
