原题目如下:
0x00 前言
本题考察的是php本地文件包含,训练题尽量通过理解原理来解题,不要使用工具(例如中国蚁剑、御剑等)。本题有两个Get,一个hello,一个page,page会被include函数包含,并被执行,所以,我们有如下几个解题方法。
0x01 方法一:php://input方法
使用php://input的话,php://会被过滤掉,可以通过Php/PHP/phP等绕过str_replace的过滤。Php://input可以访问请求的原始数据的只读流,即可以直接读取POST上没有经过解析的原始数据,用burp抓包,写入php,获得文件列表,找到我们需要的flag文件。
读取fl4gisisish3r3.php文件,我们可以用hello,或者继续用input,我们都试一下
使用hello参数获得文件内容:在地址后面加上?page=http://127.0.0.1/index.php/?hello=
使用input,然后运行system('cat ./fl4gisisish3r3.php')获得内容
0x02 方法二:data://text/plain;base64,[base64之后的代码] 伪协议
从PHP5.2.0起,数据封装流就开始有效,用于数据流的读取。如果传入的都是PHP代码,就会执行任意代码。我们把php代码进行base64之后加到后面,比如的base64为:PD9waHAgIHN5c3RlbSgnbHMgLycpOyA/Pg==
运行结果为:
的base64为PD9waHAgc3lzdGVtKCdscycpOyA/Pg==
找到了文件,再用之前的方法读出内容即可。
*data://在传递system('cat ./fl4gisisish3r3.php')之后并没有输出内容,知道原因的大佬可以留个言。
来源地址:https://blog.csdn.net/weixin_47610939/article/details/126019042