发新话题
打印

[讨论]union查询中变量查询多个不同字段的表如何构造

[讨论]union查询中变量查询多个不同字段的表如何构造

议题作者:下雨天
信息来源:邪恶八进制信息安全团队(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 错误 &#39;80040e14&#39;

在联合查询中所选定的两个数据表或查询中的列数不匹配。

/book_zhang.asp,行 10
如果查b_class 则15个,出错如下:
引用:
Microsoft JET Database Engine 错误 &#39;80040e14&#39;

在联合查询中所选定的两个数据表或查询中的列数不匹配。

/book_zhang.asp,行 7
小弟的问题说完了,在此请教SQL注入高手,可不可以构造一个union语句同时满足

PS:个人小发现,如果一个变量查几个表,但他们显示的内容在不同的块里,就有可能构造成功,得到我们想要的信息,因为一个块出错不影响另一个块的正常的union查询....:)
我独自一个人站在阳台上 看着漆黑的夜空和偶尔出现在天空中的冷清的烟火 冷冷的夜风吹来 我看见一年的时光在我的手中翻涌 升腾最后归于平静 只留下无法抹去的痕迹……

TOP

下雨天,我没测试过这个问题
不过我想如果他的语句是这个形式的
复制内容到剪贴板
代码:
<%
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

if rs1.eof then
....
end if

set rs2=server.CreateObject("ADODB.recordset")
sql2="select * from b_class where b_id="&id
rs2.open sql2,conn,1,3

if not rs2.eof then


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

end if
%>
这样的应该可以查询,我这时候还有事情,我等一下再去测试。。。。

TOP

恩,感谢楼上两位的回答:)
我是在测试一个网络文章系统的时候遇到这个问题的,现在把自己的心得小结一下:
class.asp 可以Union查询暴出东东,而 book.asp 却不可以.(由于没有在论坛贴图的习惯,就不放图了)
对比分析这些文件的代码可以知道,两个文件都有同一个参数查询不同的表的代码,但是如果不同的查询结果放到不同的表格里显示,即使同一个变量用Union查询出错,也不会影响另一个表格里的显示结果,而book.asp就是因为一个表格里有<%=rs2("class")%>也有<%=rs1("zuozhe")%>,所以有一个出错就没办法显示正确的了,也就不能暴出东西啦。
最后,再次感谢兄弟们指点:)
我独自一个人站在阳台上 看着漆黑的夜空和偶尔出现在天空中的冷清的烟火 冷冷的夜风吹来 我看见一年的时光在我的手中翻涌 升腾最后归于平静 只留下无法抹去的痕迹……

TOP

发新话题