[原创]动网论坛短消息模块过滤不严格的注入漏洞

危害:可构造特殊SQL语句注入动网论坛
测试环境:Dvbbs 7.1.0 Sql版 Sp1 20051114 (到目前2007年3月15日为止最新版本)
实施条件:有论坛后台管理论坛基本信息的权限。(怎么获得?自己想吧)
write by :flower.b
漏洞原因:动网论坛中有很多自动发送PM的地方,很多地方都没有做参数的过滤就直接构造了SQL语句,如:

'文件 reg.asp
   If Dvbbs.Forum_Setting(46)="1" Then
    
'发送注册短信
    Dim sender,title,body,UserMsg,MsgID
    sender
=Dvbbs.Forum_Info(0)
    title
=Dvbbs.lanstr(2)&Dvbbs.Forum_Info(0)
    body 
= template.html(18)
    body 
= Replace(body,"{$Forumname}",Dvbbs.Forum_Info(0))
    sql
="insert into dv_message(incept,sender,title,content,sendtime,flag,issend) values('"&username&"','"&sender&"','"&title&"','"&body&"',"&SqlNowString&",0,1)"
    Dvbbs.Execute(sql)
    
Set rs=Dvbbs.execute("select top 1 ID from [Dv_message] order by ID desc")
    MsgID
=rs(0)
    Rs.close:
Set Rs=Nothing
    UserMsg
="1||"& MsgID &"||"& sender
    Dvbbs.execute(
"UPDATE [Dv_User] Set UserMsg='"&Dvbbs.CheckStr(UserMsg)&"' WHERE UserID="&Dvbbs.userid)
End If

上面代码中的 sender,title,body 虽然不是用户输入的内容,但配置文件中的字符串就一定没有问题不用过滤?
此时只要有后台的管理权限,修改下论坛的标题或注册注册消息的模板....嘿嘿。

同样的问题,还出现在 savepost.asp 中的用户订阅短消息更新提示部分:
Dvbbs.Execute("insert into dv_message(incept,sender,title,content,sendtime,flag,issend) values('"&Rs(3)&"','"&Dvbbs.Forum_info(0)&"','"&template.Strings(26)&"','"&mailbody&"',"&SqlNowString&",0,1)")

解决办法:对这些变量增加 Dvbbs.CheckStr() 过滤后再构造SQL。

后记:动网论坛的注入漏洞层出不穷,与日月同辉。自从SQL注入这门编程“新科学”,被小猪之流在中国发扬光大,动网论坛是所有系统中被爆SQL注入最多、最严重、波及范围最广的ASP网站程序。动网论坛最烂?不是,动网论坛做为结构话编程来说论坛已经太大了!向上面两个地方在使用ADO.NET中的参数方法完全可以避免,但是动网论坛的这种方式,仅依靠程序员个人能力,小心、小心+小心,根本注意不过来这么大的系统,也就不可避免的出现各种各样的注入漏洞。动网论坛做为国内ASP编程的领军人,应该把ASP向面向对象方向发展了!而不是去做什么并不占优势的PHP版!(沙滩的市场是怎么考虑的?)

posted on 2007-03-15 13:18  flower.b  阅读(677)  评论(0编辑  收藏  举报