php渗透

 人参与 | 时间:2026-10-17 06:50:14

php渗透

凌晨两点,我盯着Burp Suite里那个被SQLmap标记为“疑似注入”的请求包,咖啡已经凉透了。目标是一个用PHP写的旧版电商后台,登录框旁边还挂着“Powered by PHP 5.2”的版权信息——这种古董级环境,简直像把家门钥匙挂在门口。

PHP渗透的核心从来不是0day,而是逻辑漏洞和配置失误。我见过太多人一上来就扫目录、跑WPScan,却忽略了最基础的:开发者留下的调试接口。那次我在URL后加上`?debug=1`,页面直接吐出了完整SQL查询语句和数据库表前缀。这比任何自动化工具都管用。

拿文件上传来说。PHP站点的过滤器总爱检查`Content-Type`或扩展名黑名单,但很少有人注意`getimagesize()`函数——它只验证文件头部几个字节。我经常把一句话木马藏在PNG图片的EXIF注释里,改名`.php`上传。服务器若没关掉`exif_imagetype`的绕过可能,那整个`uploads`目录就成了后花园。有个小技巧:上传`.pht`或`.php3`扩展名,很多老配置的Apache默认不解析,但如果你能同时上传`.htaccess`文件让`AddType application/x-httpd-php .jpg`,那才是真正的降维打击。

但最让我觉得讽刺的,是那些看似安全的代码。比如用`mysqli_real_escape_string()`过滤输入,看着挺专业,可如果查询语句写成这样——SELECT * FROM users WHERE id = $_GET['id']——那过滤器根本没用。因为数字型注入不需要引号闭合,直接`1 UNION SELECT...`就能绕过。PHP开发者总爱把精力放在错误的地方,忽略了根本问题:参数化查询才是唯一的解药。

还有session机制。PHP默认把session文件存在`/tmp`下,文件名是`sess_`加会话ID。如果目标站允许用户控制任意文件包含路径,那你可以尝试把session文件路径指向一个你能写入内容的文件——比如图片马。然后通过包含它来执行代码。这招在`allow_url_include=On`的时候几乎无解。有一次我干脆把恶意PHP代码写进User-Agent头,然后疯狂刷新页面,让session文件里堆满垃圾。最后包含那个session文件时,代码就执行了。

别迷信工具。SQLmap扫不出来的盲注,靠手测反而更快。那次目标站过滤了空格和注释符,我用`%0a`换行符代替空格,`/*!50000SELECT*/`这种MySQL特性来绕过关键字过滤。在`order by`后面加`if(1=1,1,2)`,观察页面排序变化,硬是手工拖出了整张用户表。

PHP渗透的本质,就是跟开发者的懒惰和疏忽博弈。他们省掉一行代码,你就多一条路。他们用错一个函数,你就多一个入口。有时候你花三小时绕WAF,不如直接翻翻源码里有没有`eval($_POST['x'])`这种后门。毕竟,最坚固的堡垒,往往从内部被攻破。

收工前我习惯把日志清干净,但总会故意留一个不起眼的错误——比如在`access.log`里伪造一条404记录。下次再来时,如果那条记录消失了,说明管理员已经注意到异常。那这站,就不能再碰了。

顶: 8踩: 3585