游客发表
凌晨两点,网站挖漏我盯着Burp Suite里那个红色的网站挖漏报错提示,手边的网站挖漏咖啡已经凉透了。目标是网站挖漏一个政府网站的信息公开栏目,一个看起来人畜无害的网站挖漏搜索框。
漏洞往往藏在最不起眼的网站挖漏地方。这个搜索框没有用参数化查询,网站挖漏直接把用户输入拼进了SQL语句。网站挖漏我输入一个单引号,网站挖漏页面返回了数据库错误——标准的网站挖漏MySQL报错信息,连字段名都带出来了。网站挖漏那一刻我甚至有点感动,网站挖漏这年头还能遇到这么“实诚”的网站挖漏站点。
挖掘漏洞的网站挖漏过程像在玩一场高风险的解谜游戏。你得先摸清目标的网站挖漏技术栈,判断是Java还是PHP,用的是Tomcat还是Nginx,后端接的是Oracle还是PostgreSQL。信息收集阶段最枯燥,但往往决定成败。我习惯先用Nmap扫一遍端口,再用whatweb识别指纹,最后手工翻一遍robots.txt和源码注释——很多开发者会把数据库密码或者后台路径留在注释里,这比任何自动化工具都管用。
真正动手的时候,反而要慢下来。sqlmap这种工具能跑出数据,但动静太大,目标网站的WAF可能会直接封IP。我选择手工构造payload,把查询条件闭合,再用union select把当前用户权限带出来。当屏幕上跳出“root@localhost”的时候,我骂了一句脏话——这站点的数据库居然用的root账号,而且没设访问限制。
你以为拿到数据库权限就完了?差的远。root权限只能读数据,想要进一步控制服务器,还得找上传点或者命令执行的地方。我翻了一下后台管理页面,发现有个文件上传功能,前端做了文件类型校验,但后端没验证。我改了一下HTTP请求,把Content-Type改成image/jpeg,文件后缀改成.jpg,里面塞了一句话木马。上传成功那一刻,我的浏览器弹出了目标服务器的系统信息——用的是老旧的CentOS 6,内核版本还停留在三年前。
整个流程走下来,花了大概四个小时。其实漏洞本身不难,难的是耐心和细心。我见过太多人拿着一堆自动化工具乱扫,扫出一堆“高危漏洞”,结果全是误报。真正的漏洞挖掘,更像是一场和开发者之间的心理博弈——你得猜他当时写代码的时候偷了哪些懒,用了哪些不安全的函数,然后顺着他的思维漏洞钻进去。
后来我把这个漏洞提交给了CNVD,那边的人回复说会通知厂商修复。两周后再看,那个搜索框已经加上了参数化查询,上传功能也做了二次校验。但我心里清楚,这只是一个站点,互联网上还有成千上万个类似的漏洞等着被挖出来。有些是开发者的疏忽,有些是系统老化遗留的问题,还有一些是明知故犯——毕竟修漏洞要花钱,而数据泄露的风险,在很多人眼里只是小概率事件。
早上六点,我关掉电脑。窗户外面天已经亮了,楼下早餐铺子飘出油条的香味。我决定出去吃个早饭,暂时忘掉那些SQL注入和文件上传。但我知道,下次再打开Burp Suite的时候,我还是会忍不住去试探每一个输入框——这大概就是技术控的本能,永远对“未知”保持着一种近乎偏执的好奇心。
友情链接