您现在的位置是:娱乐 >>正文
sql注入攻击原理
娱乐4273人已围观
简介一个登录框,两个输入框,一个按钮。攻击者往用户名里敲了一串引号和分号,数据库就吐出了所有用户的密码哈希。这不是电影情节,是每天在互联网上真实发生的事情。sql注入可能是最老派的攻击手法,却至今仍在ow ...
一个登录框,入攻两个输入框,击原一个按钮。入攻攻击者往用户名里敲了一串引号和分号,击原数据库就吐出了所有用户的入攻密码哈希。这不是击原电影情节,是入攻每天在互联网上真实发生的事情。sql注入可能是击原最老派的攻击手法,却至今仍在owasp十大漏洞榜单上占着位置——因为它太容易发生了。入攻
原理其实不复杂。击原应用程序把用户输入直接拼进sql语句,入攻然后交给数据库执行。击原就像你写好一张取款单,入攻银行柜员看都不看就把单子上的击原数字照单全收。攻击者只需要在输入框里构造特殊的入攻sql片段,就能让原本该查询一条记录的语句,变成删除整张表、或者导出全部数据的命令。
拿一个典型的例子说话。假设后台代码写了这么一句:select * from users where name = '{ $username}' and password = '{ $password}';
用户正常输入admin和123456,数据库执行的是“查一下有没有叫admin且密码是123456的人”。但如果攻击者在用户名处输入:admin' or '1'='1
整条语句就变成了:select * from users where name = 'admin' or '1'='1' and password = '...';
注意那个or '1'='1',恒真条件。数据库一看,哦,用户名匹配admin,或者1=1成立,那就把第一条符合条件的记录返回。如果表里第一条是管理员账号,攻击者就直接以管理员身份登录了。
更狠的玩法是用union select把别的表的数据拼进来。比如输入:' union select username, password from users --
双横线把后面的查询注释掉,整个语句变成“查用户表,顺便把users表里的用户名和密码列全查出来”。一次请求,数据库就把底裤翻了个底朝天。
我见过最荒诞的一次案例是在某个政府网站的信息公开栏目里。那个搜索框连基本的过滤都没有,输入一个单引号直接报错,报错信息里把完整的sql语句都打印出来了。这等于把自家保险柜的密码写在门牌上。后来测试人员用sqlmap跑了几分钟,整个后台数据就下载完了。
为什么这类漏洞到现在还杀不完?说白了,很多程序员写代码时默认用户是好人,从没想过输入框里可能藏着恶意代码。字符串拼接sql太顺手了,参数化查询要写预编译语句,麻烦。等到被攻破才后悔,数据已经被拖走卖了。
防御手段倒是现成的:参数化查询是首选,把sql结构和用户输入彻底分开;其次是严格的白名单校验,过滤掉引号、分号、注释符这些特殊字符;再就是数据库权限最小化,就算被注入,攻击者也拿不到删库的权限。但工具再好,人不去用等于没有。
说白了,sql注入攻击的根子不在技术,在人的惰性。每次看到有人还在用字符串拼接sql,我都想摇着他肩膀喊:你省的那几分钟,可能要用几百万条用户数据来还。
Tags:
上一篇:原厂domnickhunter
下一篇:如何在网上赚钱
相关文章
socket与websocket区别
娱乐Socket和WebSocket,名字看着像兄弟,实际却是两个时代的东西。Socket是操作系统提供的网络编程接口,你写TCP或UDP通信时用的就是它;而WebSocket是应用层协议,跑在HTTP之 ...
【娱乐】
阅读更多在线短信网页版测试
娱乐我花了半小时,用手机浏览器打开了一个在线短信网页版平台。页面很干净,输入框上方写着“无需下载,即开即用”。我输入自己的手机号,点了发送,几秒后,手机真的震了一下——一条带验证码的短信躺在收件箱里。 这 ...
【娱乐】
阅读更多导弹漏洞
娱乐导弹发射井的混凝土穹顶裂开一道缝,操作员李伟盯着屏幕上的红色警告标识,后背的汗把制服黏在了椅子上。系统显示导弹的飞行参数出现偏差,弹头轨迹偏离预定目标方向约3.2度。这个数字意味着什么?如果按原计划发 ...
【娱乐】
阅读更多