[src = hackme] LFI
题目描述
What this admin’s password? That is not important at all, just get the flag.
Tips: LFI, php://filter
WP
点击题目,跳转到题目页面。网页的URL为:https://hackme.inndy.tw/lfi/?page=pages/index
点击Introduction时,URL变为:https://hackme.inndy.tw/lfi/?page=pages/intro
点击Login时,URL变为:https://hackme.inndy.tw/lfi/?page=pages/login
可以看到参数page为文件包含,题目对提示也是本地文件包含(LFI,Local file inclusion),还有一种是远程文件包含(RFI、Remote file inclusion)。php中常见的文件包含函数有以下四种:
include()
require()
include_once()
require()_once()
当利用这四个函数来包含文件时,不管文件是什么类型(图片、txt等等),都会直接作为php文件进行解析。
示例代码如下:
1 |
|
或者通过后天添加后缀对方式:
1 |
|
题目提示不要管admin和密码,所以猜测是不是有一个flag的文件,可以包含进来。尝试
https://hackme.inndy.tw/lfi/?page=pages/flag
显示下面的页面:
页面提示“Can you read the flag?”。
再看题目的第二个提示,php://filter,因为LFI只能读取到非php文件的源码,所以对PHP文件只能解析执行,所以要看到PHP文件的源码,需要通过通过php伪协议php://filter/read=convert.base64-encode/resource= 利用LFI来查看源码。构造下面的URL:
https://hackme.inndy.tw/lfi/?page=php://filter/read=convert.base64-encode/resource=pages/flag
得到一串Base64解码得到
1 | Can you read the flagrequire('config.php'); ? |
再尝试同样的方式读取config.php(https://hackme.inndy.tw/lfi/?page=php://filter/read=convert.base64-encode/resource=pages/config).得到的base64解码得到flag:
1 |
|
补充:php其他对伪协议
php://input:可以读取没有处理过的POST数据,不依赖于特定的php.ini指令。当enctype=”multipart/form-data” 的时候 php://input 是无效的。
[知识点]
本地文件包含是一个重要的Web漏洞,结合php://filter/可以泄露源码。