|
去年十一月,有漏我帮一个做外贸的洞网朋友看他的独立站。打开首页,有漏URL里明晃晃挂着?洞网debug=1,页面底部直接吐出数据库查询语句,有漏连表前缀都看得一清二楚。洞网他一脸茫然:“这不是有漏方便调试吗?”我当场用那个参数加了个联合查询,两分钟拿到管理员密码哈希。洞网他脸色变了。有漏 这种事我见得太多。洞网很多人以为“有漏洞”是有漏黑客电影里的桥段,实际上大部分漏洞蠢得让人想笑。洞网比如某次我注册一个在线工具站,有漏验证码图片的洞网URL是/captcha.php?code=1234,code参数直接就是有漏答案。我写了个循环,从0000试到9999,批量注册了三百个账号。网站后台的注册日志里,我的IP像疯了一样刷屏,但没人管。 更常见的是文件上传。一个做设计素材分享的网站,允许上传“头像”,只在前端用JS检查后缀名。我抓包改成.php,内容写个system($_GET['cmd']);,传上去直接拿到shell。服务器是台Windows Server 2008,补丁停留在2015年。我翻了翻目录,发现站长的备份文件backup_2023.zip就躺在web根目录下,里面连数据库密码都写着。我没动任何东西,退出来给他发了封邮件。三天后他回信:“谢谢,已修复。”又过了两周,我顺手再扫,那个shell还在。 为什么这些漏洞反复出现?因为建站的人根本不关心安全。他们关心的是页面好不好看、加载快不快、SEO排名高不高。安全是“成本”,不是“功能”。一个外包建站公司给客户交付时,测试用例里只有“首页能否打开”“表单能否提交”,没有“SQL注入是否过滤”“文件上传是否校验MIME类型”。客户也不懂,验收时点两下,觉得没问题就上线了。 我见过最离谱的一个案例,是某地方论坛。用户登录后,Cookie里存着user_level=1,改成user_level=9就是管理员。我改成9,刷新页面,版主管理面板直接弹出来。删帖、封号、看私信,全都能操作。我在那个论坛潜水了半个月,没发任何违规内容,只是观察。发现每天有几十个账号在尝试user_level=9,都是脚本小子在扫。真正的管理员从没注意过日志里这些异常请求。 有人会说:“我网站小,没人会盯上。”错。自动化扫描器不分大小。我自己的一个静态博客,只挂了几篇文章,每天都有几百次请求在找/wp-login.php、/.env、/phpmyadmin。它们不挑目标,只挑漏洞。你的网站有漏洞,就像家里门没锁,路过的人都会推一下。推不开的走了,推开的就进来了。 那怎么办?别指望“一键安全插件”。我试过几个流行的WordPress安全插件,装上后确实拦了一些扫描,但同时也把正常的AJAX请求给拦了。后台编辑文章时保存失败,查了半天才发现是插件把admin-ajax.php给屏蔽了。安全不是装个插件就完事,得从写代码时就当回事。参数化查询、白名单校验、最小权限原则,这些老掉牙的东西,能做到一半,就能挡住九成攻击。 最后说个真事。上个月我扫到一个政府下属单位的网站,用的是某国产CMS,版本号显示在页脚。我搜了下这个版本的已知漏洞,有个前台任意文件读取。我构造URL,读到了/etc/passwd。没继续。给他们的技术邮箱发了漏洞详情,附上修复建议。第二天收到回复:“感谢反馈,我们已通知厂商。”第三天,那个版本号从页脚消失了。但漏洞还在不在?我不知道。我只知道,那个网站至今还能打开,首页轮播图还在自动播放。 |