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