议题作者:下雨天
信息来源:邪恶八进制信息安全团队(
www.eviloctal.com)
首先请看如下代码:
复制内容到剪贴板
代码:
<%
dim id,classid,c_id
id=request.QueryString("id")
set rs1=server.CreateObject("ADODB.recordset")
sql1="select * from c_class where b_id="&id
rs1.open sql1,conn,1,1
set rs2=server.CreateObject("ADODB.recordset")
sql2="select * from b_class where b_id="&id
rs2.open sql2,conn,1,3
rs2("hist")=rs2("hist")+1
rs2.update
classid=rs2("classid")
set rs3=server.CreateObject("ADODB.recordset")
sql3="select * from class where classid="&classid
rs3.open sql3,conn,1,1
%>明显有漏洞,ID变量没做任何过滤就放到SQL中查询去了,可以按常规的注入方式去猜表名,字段名等,而我想用union查询,发现这样一个问题.
union select 1,2,3,4 from admin where id=1 则只能配前面第一个SQL的查询字段,同理查后一个则要15个,以下为相关信息:
ID查c_class要4个字段,会显示下面的代码出错:
引用:
Microsoft JET Database Engine 错误 '80040e14'
在联合查询中所选定的两个数据表或查询中的列数不匹配。
/book_zhang.asp,行 10
如果查b_class 则15个,出错如下:
引用:
Microsoft JET Database Engine 错误 '80040e14'
在联合查询中所选定的两个数据表或查询中的列数不匹配。
/book_zhang.asp,行 7
小弟的问题说完了,在此请教SQL注入高手,可不可以构造一个union语句同时满足
PS:个人小发现,如果一个变量查几个表,但他们显示的内容在不同的块里,就有可能构造成功,得到我们想要的信息,因为一个块出错不影响另一个块的正常的union查询....:)