SQL 是常见的资料库语法,
许多网站都使用 SQL 语言来取得资料。
而所谓的 SQL Injection 又被称为
SQL 注入、SQL 隐码或 SQL 注码。
即是骇客透过修改 SQL 语句,
来改变原本的指令内容,
达成窃取/破坏资料的行为,
是一种发生在应用程序与资料库之间的安全漏洞。
在设计不良的程序中,
若攻击者在输入的字串中夹带 SQL 指令,
而网站又没有进行字元检查,
那麽这些夹带进去的恶意指令,
就会被资料库服务器误认为是
正常的 SQL 指令而被执行,
导致资料库因此遭到入侵或是破坏。
有部份人认为 SQL 注入只针对 Microsoft SQL Server,但只要是支援处理 SQL 指令的资料库服务器,都有可能受到此种手法的攻击。
假设今天有一段 query statement
要求使用者输入帐号及密码如下:
SELECT * FROM customers WHERE name =' -name- ' AND password = ' -password-'
statment 中有两个参数值
-name-
与 -password-
,
这时如果透过 -name-
所对应的 input 输入
'OR 1=1 --
其中 '
是关闭 name 的 input 内容,
後面接上 OR
表示「或是」的条件,
而 1=1
这个判断永远返回 true,
再用 --
将後面的内容变成注解。
以上会使得整个 query statement 变成:
"SELECT * FROM customers WHERE name ='' OR 1=1 -- AND password = ' -password-'
由於注解後面的 AND password = ' -password-'
会直接被略过,
如此一来判断条件将永远是 true,
使得攻击者可以在不需验证帐号密码的状况下
登入 DataBase 取得资料。
攻击者透过注入恶意的 SQL 的语法去改变资料库,
比方说以下这段 malicious commands(恶意指令)。
// 浏览器送出以下 URL
// http://www.mydomain.com/products/products.asp?productid=123; DROP TABLE Products
// 服务器会进行以下指令
SELECT ProductName, ProductDescription FROM Products WHERE ProductNumber = 123
DROP TABLE Products
在上面的 URL 在 productid=123
後面加了一个分号 ;
,
再加上 DROP TABLE Products
这个 sub command,
这将会命令 SQL server
将 Products 这个 Table 删掉。
攻击者也可以使用其他 query 方法
进一步去探索其他 table 中的资料,
如下方的 SQL query:
http://www.mydomain.com/products/products.asp?productid=123 UNION SELECT Username, Password FROM USERS
其中 UNION
能将两个 SELECT
的结果
用一个结果集呈现出来,
而第二个 SELECT
是将 USERS
这个 Table 的
Username
与 Password
呈现出来,
以窃取资料库中存放的所有使用者的帐号密码。
Stored Procedures(预存程序)
是将又臭又长又常用的 SQL 语法
写成一组程序并储存起来的一种方法,
方便於後续呼叫相同程序时
不必再将完整个 SQL 语法重打一次。
攻击者亦可透过呼叫这些 Stored Procedures
进而对 DataBase 进行攻击,如下:
SomeAsp.asp?city=pune';EXEC master.dbo.xp_cmdshell' cmd.exe dir c:
上面的代码中,程序收到要执行
master.dbo.xp_cmdshell
这个预存程序,
并在後面带上参数 cmd.exe dir c:
代表想用预存程序执行这个档案。
若是攻击者将公司资料库中
某项产品的价格调为 0 元,
或窜改政府机关资料库报税资料,
或是将某大厂物料库存清单删除,
不管哪项都将导致被攻击者极大的损害。
<<: #18-手写字特效炫起来!(SVG dasharray & dashoffset)
>>: JS Library 学习笔记:嘿!有听过 GSAP 吗? (四)
许多厂商、卖家都会想知道自己的商品上架到平台贩售时,商品会排名在哪个位置? 大品牌厂商可能有经费每...
在这篇文章中,我们要来实作上一篇提到的图像模糊演算法~ 在开始之前,因为有个小状况是上一篇文中我们...
kind指令介绍 在上一章我们介绍了如何安装kind,既然安装完了,那就该知道kind支援哪些指令。...
首先登入到 LINE Notify 并进入到个人页面 接着选择要接收通知的聊天室,也可以透过一对一接...
试想一下,如果有个模型号称有99%的准确率,那这个模型好不好呢?答案是不一定,在处理分类问题时,我们...