主页 > 网络知识 > 从浅入深学习PHP文件包含(5)

从浅入深学习PHP文件包含(5)

 

从浅入深学习PHP文件包含

 

0x02:rot13编码绕过

利用rot13编码其实和base64编码绕过原理一样,只要成为php无法进行识别的代码,就不会执行。

前提是PHP没有开启short_open_tag(短标签),默认情况下是没有开启的

payload:

<?php phpinfo();?> rot13 <?cuc cucvasb();?>

 

从浅入深学习PHP文件包含

 

0x03:嵌套绕过

strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签(php7.3之后移除)

除了上面的两种编码绕过,还可以使用嵌套过滤器的方式来进行绕过,在上面的过滤器列表中有一个string.strip_tags,可以去除剥去字符串中的 HTML、XML 以及 PHP 的标签,而<?php exit; ?>实际上便是一个XML标签,既然是XML标签,就可以利用strip_tags函数去除它,所以可以先将webshell用base64编码。调用完成strip_tags后再进行base64-decode。死亡exit在第一步被去除,而webshell在第二步被还原。

payload:

#php5 ?file=php://filter/string.strip_tags|convert.base64-decode/resource=Sn0w.php DATA: content=?>PD9waHAgcGhwaW5mbygpOz8+ #由于<?php exit();不是完整的标签,所以需要加上?>进行补全

 

从浅入深学习PHP文件包含

 

但是这种方法有局限性,因为string.strip_tags在php7以上的环境下会发生段错误,从而导致无法写入,在php5的环境下则不受此影响。

那如果环境是php7的话,也可以使用过滤器嵌套的方法来做,流程是先将三个过滤器叠加之后进行压缩,然后转小写,最后再解压,这样的流程执行结束后会导致部分死亡代码错误,便可以写进去我们想要写入的shell,原理很简单,就是利用过滤器嵌套的方式让死亡代码在各种变换之间进行分解扰乱,最终变成php无法识别的字符。

?file=php://filter/zlib.deflate|string.tolower|zlib.inflate|/resource=4.php DATA: content=php://filter/zlib.deflate|string.tolower|zlib.inflate|?><?php%0dphpinfo();?>/resource=4.php 或者 content=php/:|<?php%0Dphpinfo();?>/resource=4.php

 

从浅入深学习PHP文件包含

 

经过测试发现这里最好文件名尽量不要太复制,可能会导致写不进去

 

从浅入深学习PHP文件包含

 

0x04:.htaccess的预包含利用

.htaccess是一个纯文本文件,里面存放着Apache服务器配置相关的一些指令,它类似于Apache的站点配置文件,但只作用于当前目录,而且是只有用户访问目录时才加载,通过该文件可以实现网页301重定向,自定义404错误页面,改变文件拓展名,禁止目录列表等

通过 php_value 来设置 auto_prepend_file或者 auto_append_file 配置选项包含一些敏感文件, 同时在本目录或子目录中需要有可解析的 php 文件来触发。

php_value auto_prepend_file +文件绝对路径(默认为当前上传的目录)

payload:

?file=php://filter/write=string.strip_tags/resource=.htaccess DATA: content=?>php_value%20auto_prepend_file%20D: lag.php

 

从浅入深学习PHP文件包含

 

这时无论访问那个文件,都会解析出flag.php

第二种情况 <?php if(isset($_GET['content'])){ $content = $_GET['content']; file_put_contents($content,"<?php exit();".$content); }else{ highlight_file(__FILE__); }
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!