代码执行审计


0x00 简介

本文章来自 公众号:404安全

代码执行也是我们经常遇到的,通常是eval()assert(),当然还有回调函数比如call_user_func() array_map(),正则函数,动态调用等等,因为程序对传入的参数过滤不严或者没有过滤,导致代码执行,看过我前面写的php的webshell总结的话,你就会发现很多知识是相辅相成的。

0x01 代码执行

这里说说eval的命令执行,assert在php7后面移除了。我们来看一个简单的eval代码执行

test.php

<?
$id = $_GET['x'];
eval($id);
?>

payload:

test.php?x=phpinfo();

简单到waf以为他是个webshell了,当然我们实际情况肯定遇不到这么简单的,可能需要多重组合利用,这里下面我以一个实例为例

0x02 实战审计

这里使用的是zzzphp V1.6.0的一个解析标签过程中引发的代码执行,网上也有其他人的审计思路,这里我是帮朋友复现的时候弄的。

找个的审计思路是全局搜索eval,当然你也可以搜索其他的能够引发代码执行的函数,但是这个这-1里没有。

路径:\inc\zzz_template.php

我们发现eval里面有变量,那么他是可能存在代码执行的

大概看了下parserIfLabel() 函数没有什么过滤,能够达到我们传入任意参数的目的,到了这里我们就是回溯那里调用了这个函数呗,全局搜索下parserIfLabel(),没搜索到,看了下是个类,所以搜索类名ParserTemplate

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VTMMnJQY-1585740849166)(./img/1.3.3.png)\]

既然 \admin\save.php 调用了我们这个,不妨看看后台那里有模板操作这个


当然完全你也可以回溯代码去分析,但是既然有源码能看就看。

随便找个文件放入我们遵循他正则的代码即可,不过一般我们测试的过程中,尽量选择对目标影响小的文件。

payload:

{if:assert(phpinfo())}x{end if}

响小的文件。

payload:

{if:assert(phpinfo())}x{end if}

于此同类的还有苹果cms8.x,都是在解析标签过程中出现的问题,一般看到可以自定义解析标签那么就值得注意,命令执行与此类似,这里就不说了。


文章作者: Young
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Young !
评论
 上一篇
初始代码审计 初始代码审计
0x00 简介本文章来自 公众号:404安全 终于来到了代码审计篇章。希望看了朋友有所收获,我们通常把代码审计分为黑盒和白盒,我们一般结合起来用。 通常我们白盒审计有多种方法我们可以归纳为: 1.通读全文 2.回溯 其中通读全文费时间,但是
2020-04-01
下一篇 
文件操作审计 文件操作审计
简介本文章来自 公众号:404安全 0x00 文件包含本地包含本地文件包含(Local File Include)简称 LFI,文件包含在php中,一般涉及到的危险函数有include()、include_once()、require()、
2020-04-01
  目录