当前位置:首页 > 探索

webshell测试

webshell测试这事,测试我干过最狠的测试一次,是测试在一台被攻陷的服务器上,用一句话木马读出了对方数据库里三千条明文密码。测试不是测试技术多高明,是测试管理员把备份文件跟web根目录放在一起,文件名还是测试backup.zip。

测试webshell,测试本质上是测试在跟服务器管理员玩捉迷藏。你写一个eval($_POST['x']),测试它就是测试个后门。但问题在于,测试这种后门太容易被扫出来了。测试真正有意思的测试,是测试那些藏在正常代码里的变种——比如把函数名拆开拼接,或者用回调函数间接执行。我见过最离谱的,是把webshell伪装成图片上传,然后用文件包含漏洞去触发。那玩意儿在日志里看起来就是一次普通的图片访问,谁都不会多看一眼。

你得明白,webshell测试分两层。第一层是功能测试,就是确认这玩意儿能执行命令、能读写文件、能连数据库。第二层才是关键——绕过检测。安全狗、D盾、河马,这些玩意儿的规则库我翻过不少。它们查特征码、查危险函数、查文件权限,但总有漏网之鱼。我记得有一次测试,用了一个简单的异或运算把命令字符打散,结果所有扫描器都报了clean。不是扫描器垃圾,是它们太依赖静态特征了。

真正让我印象深刻的,是一次内网渗透中的webshell利用。目标站点是某个老旧的OA系统,PHP版本5.2,连PDO都没装。我上传了一个经过混淆的菜刀马,结果发现服务器装了安全狗,直接给拦截了。折腾了半小时,最后怎么过的?我把webshell内容拆成十几份,分别塞进不同的缓存文件里,然后用一个正常页面的参数去动态拼接执行。安全狗只查上传文件的内容,查不到运行时内存里的东西。那一次我明白了,检测永远慢半拍,因为攻击者可以无限变形。

但别以为webshell测试就是写马、传马、连马这么简单。你得考虑流量层面的问题。很多webshell管理工具的特征太明显,User-Agent、请求频率、参数格式,全都可以被WAF识别。我自己写了个小工具,每次请求都随机生成参数名,把payload拆成多段分次发送,服务端再拼起来执行。这么做虽然慢,但日志看起来就是普通浏览行为,几乎没有风险。

说句实在话,现在纯靠webshell打天下的时代过去了。云主机有主机安全组件,容器环境有运行时防护,连虚拟主机都开始装EDR。但webshell测试依然有价值——它训练你对文件上传、代码执行、日志分析的敏感度。你写一个webshell,就得去理解服务端怎么解析请求、怎么处理文件、怎么记录访问。这些知识,比工具本身值钱多了。

最后说个反常识的观察。我测过几十台服务器,真正防住webshell的,不是那些昂贵的防护系统,而是管理员随手改的一个默认路径,或者禁用一个不常用的PHP函数。安全有时候就是运气和习惯的组合。但作为测试者,你永远得假设自己会被发现,然后提前想好退路——比如把webshell藏在日志文件里,或者用DNS隧道外带数据。这不是狡诈,这是生存法则。

分享到: