去年帮一个做跨境电商的网站朋友看站点,刚打开后台就发现多了三个从没见过的渗透管理员账号。服务器日志里,测试有人凌晨三点用他离职半年的网站运营邮箱登录,IP挂在荷兰。渗透这不是测试电影情节,是网站网站渗透测试里最常撞见的场景——你以为关掉的门,其实还留着缝。渗透
渗透测试说白了,测试就是网站雇人合法地黑自己。但很多人把它想成跑一遍扫描器,渗透出一份报告,测试然后塞进抽屉。网站真不是渗透。我见过太多团队拿着“高危漏洞:0个”的测试PDF沾沾自喜,结果三个月后被拖库,原因写在他们忽略的那页附录里:一个测试环境遗留的API接口,没鉴权,能直接查用户手机号。
干这行的人有个习惯,拿到目标先不碰工具。打开浏览器,正常点一遍。注册、登录、改密码、下单、退款。这个过程里能摸出业务逻辑的脾气。有次测一个在线教育平台,课程购买流程里有个“优惠券叠加”的接口。前端限制只能用一张,但抓包重放,把同一个券码提交二十次,系统照单全收。最后花九块九买了标价两千的课。这种漏洞扫描器永远扫不出来,它不懂你的业务规则。
工具当然要用。Burp Suite 挂上代理,把每个请求都过一遍。看到参数里有 id=1024,顺手改成 id=1025,返回了别人的订单详情。这叫水平越权。再试试 id=1,出来了管理员面板,这是垂直越权。越权漏洞在国内站点里占比高得离谱,原因也简单——开发图省事,前端藏个菜单就以为安全了,后端接口根本没校验权限。
注入类漏洞这些年少了,但没绝迹。有个做政务系统的客户,搜索框用了预编译,安全。可他们导出Excel的功能,拼接的是 order by 后面的字段名。测试时把 order by name 换成 order by (select sleep(5)),页面卡了五秒。时间盲注确认。再往后,load_file() 读服务器文件,into outfile 写webshell。一套下来,数据库权限直接变系统权限。
文件上传是另一个重灾区。前端校验 accept=".jpg" ?抓包改后缀。后端校验Content-Type?改成 image/jpeg。校验文件头?在木马前面加 GIF89a。最后传上去一个 shell.php,访问 /uploads/shell.php?cmd=whoami,回显 www-data。这时候离拿下服务器只差一个提权漏洞。我习惯在报告里把这类问题标成“致命”,不是吓唬人,是见过太多企业把上传目录设成可执行,还配了 777 权限。
渗透测试报告不该是漏洞列表。好的报告会讲故事:从哪个入口进来,利用了什么逻辑缺陷,横向移动到哪台机器,最后拿到了什么数据。客户看完能明白,哦,原来我花二十万买的WAF,绕过去只需要在URL里加个 %00。原来我每周改一次密码的策略,在撞库攻击面前跟没改一样。
说个真事。某次测试完,客户问能不能把报告里的“高危”改成“中危”,因为KPI考核挂钩。我拒绝了。三个月后他们被勒索病毒加密了数据库,找我回去做应急。这次他们没提改评级的事。渗透测试的价值不在报告本身,在于逼着团队直面那些“应该没事”的侥幸。你关掉一个调试接口,可能就挡住了一次拖库。你给查询参数加个白名单,可能就避免了一次数据泄露。安全这事,没有满分,只有不断修补。