如何注入漏洞

 人参与 | 时间:2026-10-17 06:54:17

我见过最蠢的何注注入,是入漏有人把`'; DROP TABLE users; --`直接贴在搜索框里,然后对着报错页面发呆。何注那是入漏个刚学SQL的新手,他以为数据库会像电影里那样炸出火花。何注实际上,入漏数据库只是何注冷冷地返回一条语法错误,然后他的入漏账号被封了24小时。真正的何注注入不是这样的,它更像是入漏撬锁——你得先摸清锁芯的结构,再决定用回形针还是何注用液压钳。

拿最常见的入漏SQL注入举例。你往登录框里输入`admin' OR '1'='1`,何注如果后端代码是入漏`SELECT * FROM users WHERE name='$input'`,那这串字符就成了`SELECT * FROM users WHERE name='admin' OR '1'='1'`——条件永远为真,何注你直接以管理员身份进去了。但现实中没人把参数拼得这么裸奔,稍微有点经验的开发者会用参数化查询,那这招就废了。所以注入的第一课不是学语法,是学侦察:你得先试探出后端到底在干什么。输入`'`看报错,输入`1 AND 1=1`和`1 AND 1=2`比较返回差异,像医生用小锤敲你膝盖,看哪条反射弧是通的。

更隐蔽的是命令注入。有个真实案例,某网站有个功能,允许用户输入IP地址然后ping它。程序员图省事,直接写了`system("ping -c 4 " . $ip)`。有人输入`127.0.0.1; cat /etc/passwd`,分号一断,第二条命令就执行了。你甚至不需要懂Linux,只要知道分号能分隔命令就行。但这类漏洞现在越来越少了,因为容器化和白名单把执行环境锁得死死的。倒是另一种注入正在野蛮生长——LDAP注入。很多公司的内部系统还在用老掉牙的LDAP做认证,你输入`*)(uid=*))(|(uid=*`,可能直接绕过整个目录树的权限校验。我见过一个测试工程师,用这招在甲方系统里逛了一圈,把离职员工的账号全翻出来了,吓得对方连夜升级了中间件。

但说真的,现在挖注入,最值钱的不是这些老套路,而是NoSQL注入和模板注入。MongoDB的查询用的是JSON,你给`$gt`操作符传个空数组,可能就把条件变成了“大于一切”。模板引擎更野——你用`{ { 7*7}}`去试,如果页面回显`49`,那恭喜,你找到SSTI了,这意味着你可以在服务器上执行任意代码。去年有个知名电商的优惠券系统就是这么被打穿的,攻击者用模板注入直接读走了数据库配置文件的密钥,整个过程没触发任何WAF规则,因为流量看起来就像普通用户输入了几个花括号而已。

写这些不是为了教人犯罪,而是想让你明白:漏洞的本质是信任。你信任用户输入不会包含特殊字符,信任拼接出来的字符串不会变成代码,信任框架默认配置足够安全——但现实里每个信任都可能被辜负。防御方和攻击方其实在做同一件事:猜对方哪里松懈了。我认识一个白帽子,他每天的工作就是往各种参数里塞`