rideckszz/poc-CVE-2019-9053

GitHub: rideckszz/poc-CVE-2019-9053

针对CVE-2019-9053(CMS Made Simple <= 2.2.9 time-based blind SQL注入)的Python 3教学型PoC,专为CTF和实验室环境优化了数据提取速度。

Stars: 1 | Forks: 0

# PoC CVE-2019-9053 - CMS Made Simple SQL 注入 这是一个使用 Python 3 编写的针对 CVE-2019-9053 的教学性质 PoC,该漏洞是存在于 CMS Made Simple <= 2.2.9 中的 time-based blind SQL Injection 漏洞。 此版本针对 CTF/实验室环境进行了修改。它预配置了一些前缀以减少提取时间,并提供了中文(注:原指葡语,在此根据要求翻译为目标语言中文)的说明信息,以帮助学生理解该 exploit 的运行原理。 ## 警告 本项目仅供教育、受控实验室环境和 CTF 环境使用。 未经明确授权,请勿将此代码用于第三方系统。 本仓库作者不对本材料的滥用承担责任。 ## 漏洞信息 CVE-2019-9053 影响旧版本的 CMS Made Simple,允许通过以下 endpoint 中的 `m1_idlist` 参数进行未授权的 SQL Injection: ``` /moduleinterface.php?mact=News,m1_,default,0 ``` 由于 SQL 查询的响应不会直接显示在页面上,因此该 exploit 使用了一种称为 **time-based blind SQL Injection** 的技术。 ## exploit 工作原理 该 exploit 发送的 payload 会在条件为真时,使数据库执行 `sleep(1)`。 概念示例: ``` AND ( SELECT sleep(1) FROM cms_users WHERE password LIKE '0c01%' ) ``` 如果服务器响应出现延迟,脚本就会判定测试的前缀是正确的。 通过这种方式,它会逐个字符地还原敏感信息,例如: - 密码 salt - 用户名 - 电子邮件 - 密码 hash 在此 CTF 版本中,代码中已经包含了一些前缀,以减少活动期间所需的时间。 ## 什么是 time-based blind SQL Injection? 当应用程序将用户可控的数据插入到 SQL 查询中而未进行适当处理时,就会发生 SQL Injection。 在这个例子中,它是 **blind**(盲注)的,因为查询结果不会直接显示在 HTTP 响应中。 它之所以是 **time-based**(基于时间)的,是因为攻击者利用服务器的响应时间作为反馈渠道。如果测试的条件为真,数据库就会通过 `sleep()` 产生延迟。如果为假,则正常返回响应。 简化示例: ``` Pergunta feita pelo exploit: "O hash da senha começa com 0c01?" Se sim: O banco executa sleep(1), e a resposta demora. Se não: A resposta vem sem atraso perceptível. ``` 通过逐个字符重复此过程,即使页面上没有直接显示数据库中的值,exploit 也能将其还原出来。 ## 什么是 salt? salt 是在生成 hash 之前与密码一起使用的一个额外值。 在这个挑战中,CMS Made Simple 使用了类似于以下的逻辑: ``` md5(salt + password) ``` 例如: ``` salt = 1dac0d92e9fa6bb2 password = exemplo123 ``` hash 将根据以下内容进行计算: ``` 1dac0d92e9fa6bb2exemplo123 ``` salt 的作用是增加预计算表(如彩虹表)攻击的难度,并确保相同的密码在不同的上下文中能生成不同的 hash。 尽管如此,`md5(salt + password)` 仍然是一种过时且脆弱的密码存储方式。现代系统应当使用专门的密码算法,例如: - Argon2 - bcrypt - scrypt - PBKDF2 ## 此 CTF 版本的修改说明 此版本经过调整,以便在实际操作中更易于使用。 主要更改包括: - 代码已更新至 Python 3。 - 提供了中文(原意指母语,此处对应翻译)的说明性横幅。 - 在终端中简要解释 exploit 的工作原理。 - 包含已知前缀以加快提取速度。 - 针对十六进制格式的 salt 和 hash 优化了字符集 (Charset)。 - 限制了 salt 和 hash 的长度。 - 提供了使用 wordlist 进行破解的选项。 挑战中使用的值: ``` Salt completo: 1dac0d92e9fa6bb2 Username: mitch Email: admin@admin.com Hash completo: 0c01f4468bd75d7a84c7eb73846e8d96 ``` exploit 中配置的前缀: ``` Salt prefix: 1dac0d92 Username prefix: mit Email prefix: admin@ Hash prefix: 0c01f446 ``` 这些前缀并没有改变攻击的核心逻辑。它们只是减少了实验室活动所需的时间。 ## 仓库结构 ``` poc-CVE-2019-9053/ ├── exploit_ctf.py ├── requirements.txt ├── README.md ├── wordlist-example.txt └── .gitignore ``` ## 环境要求 - Python 3 - requests - termcolor ## 安装说明 克隆仓库: ``` git clone https://github.com/SEU_USUARIO/poc-CVE-2019-9053.git cd poc-CVE-2019-9053 ``` 创建虚拟环境: ``` python3 -m venv .venv ``` 激活虚拟环境: ``` source .venv/bin/activate ``` 安装依赖项: ``` pip install -r requirements.txt ``` ## requirements.txt `requirements.txt` 文件应包含: ``` requests termcolor ``` ## 使用说明 简单执行: ``` python3 exploit_ctf.py -u http://target/cms ``` 使用 wordlist 尝试破解密码: ``` python3 exploit_ctf.py -u http://target/cms --crack -w wordlist-example.txt ``` 查看脚本帮助: ``` python3 exploit_ctf.py -h ``` ## wordlist 示例 `wordlist-example.txt` 文件可以包含: ``` wrongpassword admin123 dieema123 password 123456 ``` ## 预期输出示例 ``` [+] Salt da senha encontrado: 1dac0d92e9fa6bb2 [+] Username encontrado: mitch [+] Email encontrado: admin@admin.com [+] Hash da senha encontrado: 0c01f4468bd75d7a84c7eb73846e8d96 [+] Senha encontrada: dieema123 ``` ## 破解原理解析 在 exploit 提取出密码的 salt 和 hash 之后,它可以尝试使用 wordlist 来找出明文密码。 测试的逻辑如下: ``` md5(salt + senha_candidata) ``` 对于 wordlist 中的每一个密码,脚本都会计算其 hash,并将其与从数据库中提取出的 hash 进行比较。 概念示例: ``` candidate_hash = md5("1dac0d92e9fa6bb2" + "dieema123") ``` 如果结果与提取出的 hash 相同,说明密码已找到。 ## 关于执行时间的注意事项 Time-based SQL Injection 通常比较缓慢,因为需要通过多次请求来测试每一个字符。 此版本通过以下方式缩短了时间: - 已知前缀。 - 用于 salt 和 hash 的十六进制字符集。 - 已知的 salt 和 hash 最大长度。 - 每个正确字符产生 1 秒的延迟。 尽管如此,实际所需时间仍可能因以下因素而异: - 网络延迟。 - 服务器负载。 - 数据库性能。 - `TIME_DELAY` 中配置的值。 如果出现大量误报或漏报,请增加代码中 `TIME_DELAY` 的值。 ## 参考 - CVE-2019-9053 - CMS Made Simple <= 2.2.9 - 技术:time-based blind SQL Injection ## 许可证 仅供教育使用。 本材料仅供学习、实验室演示和 CTF 活动之用。
标签:CISA项目, PoC, Python, 无后门, 暴力破解