挖掘漏洞
2017年,挖掘漏洞一个叫Marcus Hutchins的挖掘漏洞英国程序员在分析WannaCry勒索病毒时,随手注册了病毒代码里引用的挖掘漏洞一个未注册域名。就这么一个动作,挖掘漏洞意外触发了病毒的挖掘漏洞“自杀开关”,全球十几万台电脑的挖掘漏洞加密进程戛然而止。他不是挖掘漏洞安全团队派出的专家,没有昂贵的挖掘漏洞工具,甚至当时正在度假。挖掘漏洞漏洞挖掘有时候就是挖掘漏洞这样——关键不在于你有多强的资源,而在于你有没有注意到那个别人忽略的挖掘漏洞细节。 大多数人理解的挖掘漏洞“漏洞”是软件里的bug,是挖掘漏洞程序员写错的某行代码。这没错,挖掘漏洞但远远不够。挖掘漏洞真正被利用的漏洞,往往不是代码写错了,而是设计者假设了一个不该假设的前提。比如某系统认为“用户不会修改这个参数”,于是后端不校验,只靠前端JavaScript拦着。攻击者抓个包改一下,整个权限体系就塌了。 我见过一个很典型的案例。某电商平台的优惠券接口,前端传过去的是折扣金额。后端拿到这个金额直接算进订单总价。你猜怎么着?把“-100”改成“-10000”,下单就是负价,平台倒贴钱给你。这种漏洞在代码层面没有任何语法错误,逻辑跑起来完全通顺。问题出在设计阶段:凭什么信任客户端传来的价格? 搞漏洞挖掘的人有个共同习惯:看到任何输入框,第一反应不是“我该填什么”,而是“我填了不该填的东西它会怎样”。这种思维模式跟普通人正好相反。普通人看到登录页面想的是输账号密码,挖漏洞的人想的是:如果我输一个单引号呢?如果我输一万个字符呢?如果我把请求里的用户ID改成别人的呢? SQL注入是最经典的例子。一个登录框,你输入 我自己第一次挖到漏洞是在一个高校的教务系统上。成绩查询页面的URL里有个参数叫 市面上的扫描器能查出常见漏洞,但真正值钱的漏洞几乎都是手工挖出来的。扫描器按规则匹配,规则之外的它看不见。逻辑漏洞、业务漏洞、权限设计缺陷——这些东西没有特征库可以比对,只能靠人去理解业务、去推演流程、去尝试那些“正常用户不会做的事”。 有个朋友做渗透测试,他的方法很笨:把目标网站的每个功能都走一遍,每个请求都抓下来看,每个参数都试着改一改。听起来没什么技术含量,但他靠这个方法找到过一个支付平台的漏洞——退款接口没有验证订单归属,可以退别人订单的钱到自己账户。扫描器永远扫不出这个,因为它需要你理解“退款”这个业务动作意味着什么。 挖掘漏洞这件事,说到底是一种思维训练。你得学会不信任任何输入,不假设任何行为,不放过任何异常。一个页面加载慢了0.5秒,可能意味着后端多做了一次数据库查询,而那个查询里也许就藏着注入点。一个报错信息里多了一行路径,可能就暴露了服务器的目录结构。 这活儿累,但上瘾。每次点击“发送”之前,你都不知道会发生什么。大多数时候什么都不会发生。但偶尔,屏幕上的返回结果跟你预期的不一样,那一瞬间的感觉——比什么都强。挖漏洞的人在想什么
' OR 1=1 --,后端拼接SQL语句时,验证逻辑直接被注释掉了。这个手法二十多年前就有了,到今天还有系统中招。为什么?因为开发框架换了一茬又一茬,但“图省事直接拼字符串”的习惯没变。漏洞不是技术问题,是人的问题。student_id,我把它从自己的学号改成了隔壁同学的。页面刷新,他的成绩全出来了。没有做任何高深的技术操作,就是改了一个数字。这个系统大概率从来没做过越权测试。开发者的假设是“学生只会查自己的成绩”,但URL是公开的,参数是明文的,改一下就行。工具帮不了你,好奇心才行
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-