BugkuCTF-WEB题file_get_contents
知識(shí)點(diǎn)
empty() 函數(shù)用于檢查一個(gè)變量是否為空。empty() 判斷一個(gè)變量是否被認(rèn)為是空的。當(dāng)一個(gè)變量并不存在,或者它的值等同于 FALSE,那么它會(huì)被認(rèn)為不存在。如果變量不存在的話,empty()并不會(huì)產(chǎn)生警告。
extract()函數(shù)從數(shù)組里將變量導(dǎo)入到當(dāng)前的符號(hào)表。extract函數(shù):可以進(jìn)行變量覆蓋。
語(yǔ)法:extract(array,extract_rules,prefix)
該函數(shù)使用數(shù)組鍵名作為變量名,使用數(shù)組鍵值作為變量值。針對(duì)數(shù)組里的各元素,將在當(dāng)前符號(hào)表里創(chuàng)建對(duì)應(yīng)的一個(gè)變量。第二個(gè)參數(shù) type 用于指定當(dāng)某個(gè)變量已經(jīng)存在,而數(shù)組里又有同名元素時(shí),extract() 函數(shù)如何對(duì)待這樣的突。該函數(shù)返回成功導(dǎo)入到符號(hào)表里的變量數(shù)目。
file_get_contents()把整個(gè)文件讀入一個(gè)字符串里。
語(yǔ)法:file_get_contents(path,include_path,context,start,max_length)
該函數(shù)是用于把文件的內(nèi)容讀入到一個(gè)字符串里的首選方法。如果服務(wù)器操作系統(tǒng)支持,還會(huì)使用內(nèi)存映射技術(shù)來(lái)增強(qiáng)性能。
trim()函數(shù)移除字符串兩側(cè)的空白字符或其他預(yù)定義字符。
語(yǔ)法trim(string,charlist)
經(jīng)過(guò)分析,該段代碼是將通過(guò)GET方法傳入的參數(shù)賦值給其內(nèi)某個(gè)變量,傳入的參數(shù)如果和$fn文件里的字符一致時(shí),便可以得到flag
本題分析
這道題目的考點(diǎn)是file_get_contents()函數(shù)繞過(guò)
繞過(guò)方法:
使用php://input偽協(xié)議繞過(guò)
1、將要GET的參數(shù)?xxx=php://input
用post方法傳入想要file_get_contents()函數(shù)返回的值
2、用data://偽協(xié)議繞過(guò)
將url改為:?xxx=data://text/plain;base64,想要file_get_contents()函數(shù)返回的值的base64編碼
或者將url改為:?xxx=data:text/plain,(url編碼的內(nèi)容)
本題適用的方法是第一類,因?yàn)檫€有個(gè)參數(shù)ac需要傳遞
解題流程
打開界面,有源碼
trim函數(shù):去除首尾空格
file_get_contents函數(shù):讀取文件內(nèi)容
f變量從一個(gè)叫f變量從一個(gè)叫f變量從一個(gè)叫fn的文件里讀取字符串,并消除兩端的空格。
方法一:
源碼里有file_get_contents($fn),加上提示:txt???,盲猜flag.txt,訪問(wèn)一下
內(nèi)容為bugku,
根據(jù)if($ac === $f),構(gòu)造?fn=flag.txt,&ac=bugku,最后得到flag
因?yàn)橄仍L問(wèn)flag.txt,得到內(nèi)容bugku,文件名賦給fn,f就是文件內(nèi)容,這樣f和ac就相等。
This is flag: flag{a549de013c870694e08b03dbc4822edd}
方法二:
Burp抓包,修改請(qǐng)求頭GET /ac=flag&fn=php://input HTTP /1.1,請(qǐng)求信息最下面添加flag就可以
總結(jié)
以上是生活随笔為你收集整理的BugkuCTF-WEB题file_get_contents的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BugkuCTF-PWN题pwn7-re
- 下一篇: BugkuCTF-Reverse题Tim