我们在boke.asp文件后边的参数加入"'",如 boke.asp?lantian.index.html 加个"'" 变成boke.asp?'lantian.index.html,发现报错。
这一下为sql注入开了方便之门。
分析boke.asp等文件得知,读取查询参数的语句在boke/Cls_Main.asp中,打开此文件,发现Request.ServerVariables("QUERY_STRING")有三处,而均没有过滤单引号"'"。
我们在url参数上加"'",注意是在最左边和第一个"."前加单引号,因为程序会对QUERY_STRING按照"."进行拆分,这样便可进行sql注入了。
boke/Cls_Main.asp里有这样的语句,Sql = Sql & " where BokeName = '"&BokeName&"'" ,其中bokename是通过拆分第一个查询参数得到的。
我们可以写入这样的语句 ' or userid=(select userid from dv_boke_user) or bokename=',要处理好空格。
如果boke和bbs装在了同一数据库,取得前台管理员权限不是难事。想怎么用就看你兴趣了。
====
笔者对攻击行为不感兴趣,所以发现了漏洞所在就贴出来了。解决方法很简单,直接把
Request.ServerVariables("QUERY_STRING")
都替换成
replace(Request.ServerVariables("QUERY_STRING"),"'","")
就ok了,过滤掉单引号。
按理说,动网不应犯如此低级的错误,但是人总有疏忽的时候。若不是笔者管理的一个大型论坛突然出现了陌生的管理员,跟其沟通说是他发现了boke有漏洞,将自己弄成了管理员,不然仍然不会发现boke有这个漏洞。
声明:注入未真正实践,所说方法可能存在错误。测试版本:sql版7.1sp1,与boke同一数据库