影响版本:Yxbbs3.0破绽形貌:yxbbs在用户注册时,会实时检测用户名是否已存在以及用户名是否正当,不外服务端在检测时,对用户提交数据磨练不够,原本人性化的一个功效,引入了一个注入点。详细涉及文件See.asp,对用户提交的 name = unescape(Request("name")) 并未做任何磨练。 测试URL: http://www.yimxu.com/bbs/See.Asp?Action=CheckNameamp;name=yxbbs' and (select top 1 asc(mid(password,1,1)) from yx_admin)gt;56 and '1'='1 //官方已经修补 第二处: 在Usersetup.asp中,有一个数字类型的变量,被当成文本磨练过滤了,从而造成了一个SQL注入破绽。 问题出在 Sex=yxbbs.Fun.GetStr("Sex") ,在Yx_Cls.asp里界说了GetStr这个方式,内里实在对于通常注入来说,有用的只是过滤了单引号。而在下面没有再对Sex举行任何磨练,就介入SQL语句执行了: YxBBs.execute("update [YX_User] set Birthday='"amp;Birthdayamp;"',Sex="amp;Sexamp;",PicW="amp;PicWamp;",PicH="amp;PicHamp;",Mail='"amp;Mailamp;"',QQ='"amp;QQamp;"',Honor='"amp;Honoramp;"',Pic='"amp;PicUrlamp;"',Home='"amp;Homeamp;"',Sign='"amp;Signamp;"',IsQQpic="amp;Isqqpicamp;" where name='"amp;YxBBs.MyNameamp;"' And Password='"amp;YxBBs.MyPwdamp;"'") 如果是mssql数据库版本的,支持多步语句,那这个破绽就是致命的。如果是access版本,那危害就小的多了,也就是改改参数吧。好比,可以给自己银行增加点存款,那sex就是 1,BankSave=,修改完资料,银行存款就变了。