我正在学习SQL注入,并有以下后端代码,
Set rs = server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM Registration WHERE name='"&name&"'"
rs.Open SQL,Conn,0,1
if not rs.EOF then
message = "Your ID is """ & rs("iD") & """."
else
message = "id does not exist."
end if我已经能够注入这个来提取一个iD,但是我想知道是否还可以更进一步,获取更多的信息?基于我的代码,我认为这是不可能的,因为我的代码只返回iD DB字段。
我说的对吗?
发布于 2013-04-03 05:28:37
要利用此漏洞,不需要直接输出。还有一种称为基于布尔盲的技术,其中使用不同布尔表达式的行为来推断来自以下方面的数据:
foo' AND pass LIKE 'a%如果返回成功消息,则传递以a开头,否则不会。如果在每个成功前缀上递归地重复使用所有可能的字符,则会得到整个字符串。
您也可以这样做,以获取有关数据库架构的信息:
foo' AND EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'abc%') AND '1'='1有了数据库模式的知识,就可以读取任何数据。
正如Rook已经提到的,SQLmap是一个非常有用的工具,可以自动利用这种SQL注入漏洞。
发布于 2013-04-02 19:37:38
您可以使用select中的As对记录进行别名,以使任何一列返回。还有一个问题是,如果"name“来自未经验证的用户输入,也可以将任意更改发送到DB。
发布于 2013-04-02 21:38:15
SQLMap是一个很好的工具,可以自动利用这样的缺陷。SQLMap可以转储整个数据库,即使它是盲目的sql注入。它还可以根据数据库的配置弹出一个shell。
https://security.stackexchange.com/questions/33637
复制相似问题