內網滲透
端口轉發
需要三個主機,Windows7、Windows2016、kali
Windows7為內網主機
Windows2016為跳板機
kali為攻擊機
使用到的工具
netsh、MSF
我們先在Windows7上開啟一個80服務,而這個80服務只能由Windows2016訪問,kali不能訪問
我們使用netsh進行端口轉發,這條命令是在Windows2016上執行的,目的就是在Windows2016上開啟一個監聽端口,將其流量發送至Windows7的80端口
一旦命令執行成功,我們就可以在kali上訪問Windows7的80服務了(Windows2016 IP + 監聽端口)
我們還可以使用MSF,前提是能夠將木馬上傳至Windows2016上
首先我們制作一個木馬,上傳到Windows2016上,使其上線
上線之后我們會在kali中進入meterpreter,也就是上線成功的一個標志,然后輸入shell,將Windoiws2016的終端返回到我們的kali上
接著就是和上面一樣的操作,繼續往下執行就可以了
當然我們也可以在meterpreter中直接輸入portfwd add -l 8889 -r 192.168.209.129 -p 80,然后直接在kali上訪問localhost:8889即可訪問到Windows7的80服務
當然使用MSF的時候不僅可以進行反向連接,還可以進行正向連接
開啟一個Windows2003主機,將其藏在內網當中去
我們先制作一個正向連接的木馬程序,然后將其上傳到Windows2016上去,執行木馬程序,使其上線
然后去添加一個內網的路由,讓我們的MSF進入到內網當中去
既然我們的MSF進入到了內網當中,我們可以讓木馬在后臺進行執行,然后在MSF里面進行端口掃描,看看有啥端口開放,接著使用arp -a去看一下內網中還有啥主機,發現有一臺Windows2003,我們可以使用MSF框架中的端口掃描對該主機進行掃描,將開放的端口都掃描出來,既然是Windows2003,說明可能會存在永恒之藍漏洞,然后通過永恒之藍漏洞進行連接,注意的是paylaod要用正向連接的payload
使用正向連接而不使用反向連接的原因:kali可以通過植入木馬到Windows2016上,然后通過Windows2016去訪問Windows2003,但是Windows2003卻無法去訪問kali,反向連接不成功,所以我們使用正向連接
內網代理
上傳木馬到代理服務器上,然后讓木馬在后臺進行執行,我們使用MSF里面的代理功能來做一個代理
做完代理之后還得添加路由,添加內網的一個路由,同時也添加攻擊機的路由,其次在kali的瀏覽器上去配置代理然后才能去訪問Windows7上的80服務
Meterpreter 的路由功能主要關注的是目標內網的流量如何通過跳板機轉發
使用socks添加路由的目的:將 Kali 的流量通過代理服務器轉發到目標內網。
當然,我們也可以配置Linux的全局代理,然后去修改配置文件,在最后一行添加socks 127.0.0.1 1080,然后在終端上執行命令,通過代理去訪問Windows7的80服務
隧道通信
基于Neo-reGeorg
http正向隧道工具
首先在Windows2016上開啟80服務,然后去kali上確認看看能否訪問,然后進入Neo-reGeorg工具,使用命令去生成木馬文件,將生成的木馬文件上傳至Windows2016上去,然后在本機上進行訪問tunnel.php,接下來在kali上進行連接,連接之后還是建立了一個代理隧道,然后我們去kali的瀏覽器上去配置一個代理,然后就可以正常訪問了
上述木馬屬于二進制,我們還可以生成一個PHP型的木馬文件,然后上傳到Windows2016上,運行讓其上線,上線之后我們為其添加路由,添加路由的目的是能夠讓流量從kali到達目標內網,然后再使用MSF中的代理功能,開啟一個代理,然后訪問就可以了
我們基于PHP建立了TCP的連接,然后幫助我們基于TCP協議來做socks5的代理,然后在流量監聽的時候只能監聽到TCP協議的流量,不能監聽到HTTP的流量
基于SSH的隧道通信
SSH本地轉發
開啟WIndows2016上的OpenSSH server,然后使用我們本機進行連接,我們可以執行命令,如下:
ssh -CfNg -L 8879:192.168.209.129:80 administrator@192.168.3.41
先進行遠程連接,然后將8879端口上的流量轉發到目標主機的80端口,然后就可以使用kali去訪問Windows7的80端口
其實很簡單,就是讓遠程的SSH的服務幫助我們做一個端口轉發
SSH遠程轉發
我們可以先在Windows2016上執行如下命令
ssh -CfNg -R 3333:192.168.209.129:3306 kali@192.168.3.38 并輸入kali的SSH密碼
遠程連接到kali,然后將kali本機的3333端口流量轉發到目標主機的3306端口,然后就能訪問成功了
內網隧道
EarthWorm的使用
正向代理
在Windows2016這臺主機上使用這個工具,命令如下:
ew_for_win_32.exe -s ssocksd -l 1080
然后在kali瀏覽器上配置,配置的IP為windows2016這臺主機的IP和1080端口
然后訪問localhost:1080就能夠訪問了
反向代理
公網服務器上開啟EarthWorm工具服務端,開放1080和8086端口,1080是代理端口,8086是通信端口,然后在Windows2016跳板機上啟動客戶端,和公網的8086端口進行通信,在kali的瀏覽器配置一個代理,代理的IP為公網IP,端口為1080,然后就可以成功訪問localhost:1080
端口映射
就是將內網一臺主機的端口映射到公網服務器或者其他機器上的某個端口,通過訪問公網服務器的這個端口就能事項對內網目標端口的訪問
CS免殺與應用開發
在公網服務器上開啟CS的服務端,kali上開啟CS的客戶端,進入到CS的頁面中,然后新建一個監聽器,監聽器建好之后,生成一個payload,然后將這段paylaod復制到我們的kali里面,接下來我們應該創建一個python文件,然后將這段shellcode進行加密處理,也同時將我們的加載器代碼進行加密,然后將我們加密過的shellcode和加載器代碼與他們的解密代碼放在一個python文件當中,然后使用exec去執行這段加載器代碼,上線成功,接著我們使用psinstall將python文件打包成一個exe應用程序,上傳到火絨進行檢查,如果沒檢查出來,說明加密的好
那我們如何去包裝這個木馬
我們可以通過python來開發一個簡單的應用,然后將我們的代碼引入進去,通過運行開發的應用來間接的去運行這個木馬,然后在CS上線,更好的優化方式就是多幾個線程,不要讓線程一直被占用,從而導致無法運行我們的那個木馬
網絡分離免殺
打開公網服務器上的80服務,在公網服務器上開啟CS的服務端,kali上開啟CS的客戶端,接下來的操作就是將我們生成的shellcode并將其放到我們的公網服務器上,同時也將我們的加載器代碼放到我們的公網服務器上,然后做分離免殺,然后我們新建一個python文件,里面加入我們調用公網服務器資源的代碼,然后使用exec去執行,但是需要注意的是,我們輸入的shellcode必須得是二進制的,然后去執行這個python文件就可以上線成功了
因為我們輸入的shellcode是字符串型的,而非二進制的,所以我們有兩種方法將這個字符串型修改為二進制文件
第一種方法,進行格式化
第二種方法:將我們的shellcode在前面手工添加一個b,代表二進制文件,然后將我們的這個二進制文件讀入到以bin結尾的文件中,然后去讀取的時候也就變成二進制文件了,接著將其放入到公網服務器上即可,然后運行,看看是否上線成功
接著我們使用pyinstaller將其打包成一個exe應用程序,看看是否免殺
模擬DLL劫持技術
DLL劫持技術:在一個DLL文件中植入一個木馬,將其模擬成一個被別的應用程序所調用的函數或者接口
就比如說我們使用python開發一個exe,使用這個應用程序去調用DLL中的函數,進而實現木馬免殺和上線
C語言加載調用shellcode的幾種方式
堆加載
申請內存加載
函數指針加載
ICMP隧道
icmpsh工具
icmpsh工具要替代本身系統的ping命令的應答程序
由于ping命令就是基于ICMP協議,所以我們要在本身系統關閉這個響應
在kali將服務端啟動,并且將主機IP和目標IP輸入進去,然后在Windows2016上啟動客戶端,kali這邊就已經獲取到了Windows2016的命令行了
PowerShell ICMP客戶端
PowerShell ICMP客戶端,可以運行在任意有PowerShell的環境中
在kali啟動這個工具,目標系統進入到PowerShell,然后導入Invoke-PowerShellIcmp.psl這個模塊,然后使用這個模塊進行連接,這時候不出問題我們的kali就會獲取到Windows2016的反彈shell
PingTunnel
三臺操作機器,centos、kali、Windows2016、Windows7
我們首先在centos上運行ptunnel服務端,然后使用kali去連接,指定代理端口和目標IP和端口,連接上之后,就可以去訪問centos的80服務,接著我們去kali瀏覽器配置代理,IP為本機,端口為監聽端口,然后就可以去訪問
同時也可以代理非HTTP端口,比如說mysql的3306端口,我們只需要在上面的基礎上做一個簡單的操作即可,就是將80端口修改為3306端口,然后去訪問就能夠訪問到目標系統的mysql信息
面對內網面試官最愛問的問題:當某臺機器不出網的時候,你會怎么辦
其實在我們實驗的過程中,我們的Windows7就是不出網機器,它不能上外網,也不能訪問外網,因為我們ping百度的ping不通的,所以這就叫作不出網機器
不出網能不能使用端口映射
當然不能,端口映射是與公網服務器打交道,不出網的話就無法與公網服務器打交道
對于這種問題,我們有三個解決問題
第一個是內網路由,通過設置內網的路由,能夠讓流量知道如何從攻擊機傳輸到內網
第二個是內網代理,通過設置代理,使用代理去訪問內網,往內網里傳輸數據
第三個是通過跳板機進行端口轉發
例如我們通過ICMP該怎么辦
使用pingtunnel來做端口轉發,與跳板機建立連接
那如果跳板機也無法訪問到我們的windows7該怎么辦
只能去找能夠訪問到Windows7的跳板機
DNS隧道
DNS隧道就是將其他協議的內容封裝到DNS協議中,然后DNS響應和數據包完成傳輸數據的技術
支持直連模式和中繼模式
直連模式:用戶端直接與指定的目標DNS服務器建立連接
中繼模式:通過迭代查詢的方式而實現的中繼DNS隧道
iodine既支持中繼模式,同時也支持直連模式
iodine的原理:
通過在公網服務器上運行iodine的服務端,運行之后會新建一張虛擬網卡,而如果目標機器上運行iodine的客戶端,目標主機上也會建立一張新的虛擬網卡,至此DNS隧道建立成功,而兩張網卡都是在同一網段,可以ping通
利用DNS隧道
我們將公網服務器和目標機器的80服務開啟,然后通過虛擬網卡的IP就能訪問到
同時相同的操作也可以去訪問mysql
利用DNS隧道建立SOCKS5代理隧道
在公網服務器配置frps,配置完之后運行
在內網主機上配置frpc,配置完運行
然后在kali瀏覽器配置代理,為公網IP?端口,當然也可以給命令行配置代理
然后就可以訪問到內網了
在CS上使用DNS隧道
啟動CS,然后新建一個監聽器,為Beacon DNS,然后生成一個payload為exe類型的可執行文件,將其上傳到Windows2016跳板機上,然后運行可執行文件,使其上線,然后就可以做其他的操作了