|
我见过太多人拿着扫描器对着目标一顿乱扫,网站然后看着满屏的漏洞红色告警一脸茫然。那不是网站找漏洞,那是漏洞碰运气。真正的网站漏洞挖掘,第一步永远是漏洞搞清楚这网站是用什么搭的。 看响应头,网站看报错页面,漏洞看URL结构。网站WordPress和ThinkPHP的漏洞找法能一样吗?一个Java写的金融系统和一个PHP写的个人博客,攻击面天差地别。网站我习惯先用手点一遍整个站点,漏洞把每一个功能都试一遍——注册、网站登录、漏洞搜索、网站上传、支付,凡是能交互的地方都可能是突破口。 有个朋友让我帮他看个小商城,扫了半天没结果。我打开他的个人中心,发现修改头像的地方居然能自定义图片路径。试着把路径改成`../../../../etc/passwd`,图片不显示,但报错信息里把文件内容带出来了。就这么简单,一个任意文件读取。扫描器永远发现不了这种逻辑缺陷,因为它不关心业务怎么流转,只关心已知的特征。 说到逻辑漏洞,这才是最考验人的地方。去年我测试一个订单系统,下单时把价格改成0.01元,居然直接支付成功了。更离谱的是,还有个优惠券叠加的接口,我没用任何工具,就靠浏览器开发者工具改了改参数,把一张满100减50的券用在了0.01元的订单上,系统还给我退了0.49元。这些漏洞不在代码里,在业务流程的缝隙里。 别小看那些看起来“死掉”的页面。找回密码功能,很多人觉得没什么可测的,但如果你把验证码接口和修改密码接口分开来看,会发现验证码校验只存在于第一步。直接跳到第二步,输入新密码,系统居然就接受了。这种越权操作,靠的就是对接口调用的理解——前端拦不住你,后端也没多想。 文件上传永远是个好目标。但别光试那些常见的后缀名,.php、.jsp早就被过滤了。试试`.phtml`、`.php5`、`.htaccess`,或者把文件头改成GIF89a,内容里塞一句话木马。有些系统只看Content-Type,有些只检查文件头,有些干脆什么都不查。我遇到过最离谱的,是个图片托管服务,上传一个HTML文件,居然能以原文件名直接访问,XSS就这么来了。 还有那些API接口,现在前后端分离的架构太多了。打开浏览器F12,看网络请求,你会发现一堆内部接口。有些接口没做鉴权,直接返回用户手机号、身份证号。我测过一个政务网站,一个查询接口只需要传个ID就能拿到别人申请记录,连登录都不用。这种漏洞连工具都不用,纯靠肉眼盯着请求包看。 别忽略旧功能。网站改版后,老版本的管理后台可能还挂在某个子目录下。用dirsearch跑一下字典,翻翻robots.txt,看看JS文件里有没有注释掉的接口路径。我找到过好几个后台,都是因为开发忘了删测试页面,直接暴露了登录入口,而且密码还是admin/admin。 找漏洞这事,七分靠思路,三分靠工具。你得多想一步:开发这么写,是为了方便什么?他哪里会偷懒?哪里有想当然?当你把自己代入开发者的脑子,漏洞自然就浮出来了。别迷信那些自动化工具,它们能帮你扩大覆盖面,但真正值钱的洞,都是你亲手点出来的。 |
