如何攻击网站查看漏洞
去年夏天,何攻一个做电商的击网朋友半夜给我打电话,说网站后台被人改了价,站查一台标价六千的看漏相机变成了六块,已经被人下了十七单。何攻他问我怎么防。击网我反问他一句:你知不知道别人是站查怎么攻进来的?他沉默了。这沉默很典型——大部分站长只关心“怎么挡”,看漏却从没认真想过“怎么攻”。何攻不站在攻击者的击网视角看一遍自己的系统,你永远不知道门缝在哪。站查
攻击网站的看漏第一步,从来不是何攻敲代码,而是击网看。看什么?站查看这个网站用什么搭的。打开页面,按 F12,看响应头里的 Server 字段,是 Nginx 还是 Apache,版本号有没有露出来。再看 X-Powered-By,写着 PHP/7.2.34 的话,你就知道这站跑的是老 PHP。老版本意味着什么?意味着公开漏洞库里躺着几十条能用的东西。我见过一个站,后台登录页的 HTML 注释里直接写着“测试账号 admin/123456,上线前删除”——上线了三个月还没删。
信息收集做完,下一步是找入口。入口分两种:一种是设计好的,比如登录框、搜索框、上传按钮;另一种是设计者忘了关的,比如 .git 目录、backup.zip、phpinfo.php。后者往往更致命。有个工具叫 dirsearch,跑一遍常见路径字典,几分钟就能扫出几百个响应码不是 404 的地址。我亲眼见过一个政府站,/db_backup.sql 直接能下载,里面存着全部用户表和明文密码。这不是技术多高明,是运维忘了删。
登录框是最经典的战场。你输入 ' or 1=1 --,如果后端是把用户输入直接拼进 SQL 语句的,那你就进去了。这种 SQL 注入现在少了,但没绝迹。更常见的是逻辑漏洞:比如登录接口返回的信息里,失败时提示“用户名不存在”,成功时提示“密码错误”——这就等于告诉攻击者哪些用户名是有效的。拿到有效用户名,再用常见密码字典跑一遍,总有几个用 123456 的。我统计过自己经手过的二十个中小型网站,弱口令能直接进后台的占了三成。
上传功能是另一个重灾区。你传一个 shell.php,如果服务器只检查了 Content-Type,那把它改成 image/jpeg 就能绕过。就算检查了后缀名,还有 .php5、.phtml、.php.jpg 这些变体。更狠的是解析漏洞:某些老版本 Nginx 会把 shell.jpg/x.php 当成 PHP 执行。上传成功后,你访问那个文件,就能在服务器上执行任意命令——whoami、ls、cat /etc/passwd,整个机器就是你的了。
拿到 shell 之后,攻击者一般不会立刻搞破坏。他会先看这个机器在内网的位置,能不能连数据库,能不能访问其他服务器。这叫横向移动。我见过一个案例,攻击者从一个卖文具的小网站入手,最后摸到了同一台云服务器上另一个客户的支付接口密钥。小站是入口,大站才是目标。
说这些不是教人干坏事,是想说清楚一个事实:攻击者比你更了解你的网站。你花三天写的登录逻辑,他花三分钟就能试出漏洞。防御的起点,是承认自己写的代码一定有问题,然后像攻击者一样去翻自己的每个接口、每个参数、每个返回信息。把 phpinfo 删掉,把备份文件移出 Web 目录,把错误信息关掉,把密码复杂度提上去。这些事不酷,但有用。
最后说个细节。我那个电商朋友后来查日志,发现攻击者是从一个两年前就废弃的测试接口进来的——那个接口没删,也没人记得它存在。攻击者没用什么高级工具,就是拿浏览器一个个试参数。你永远不知道哪扇门忘了锁,所以最好每扇门都锁一遍。









