0×02训练过程我们利用 chatgpt 与 goby 结合编写 poc 与 exp 有两种方法:半自动编写和全自动编写(过程中使用 chatgpt-plus 账号)。
半自动编写利用 chatgpt 进行语言格式转换,转换后生成的代码可能存在细节问题,需要进一步排错完善,最后修改对应的语句和函数内容完成 poc 与 exp 的编写。
全自动编写通过将使用到的代码模板、漏洞详细信息给到 chatgpt,让它自动生成对应模板的 poc,在给出详细信息时需要注意信息的完整与准确。目前可以实现自动编写简单的 poc,对于exp来说还需要进一步训练 chatgpt 对 goby 内置函数的使用等。
0×03cve-2010-2861adobe coldfusion 是一款高效的网络应用服务器开发环境。adobe coldfusion 9.0.1 及之前版本的管理控制台中存在多个目录遍历漏洞。远程攻击者可借助向 /cfide/administrator/enter.cfm 和 /cfide/administrator/archives/index.cfm 等发送的 locale 参数读取任意文件。
3.1 半自动编写首先尝试让 chatgpt 将 cve-2010-2861 目录遍历漏洞的 python 格式 exp 转换为 go 语言格式的代码,这样可以利用 chatgpt 代替人工完成代码解释及代码转换的过程。
我们在漏洞公开平台中选取该漏洞的 exp 代码:
在使用 chatgpt 将相应漏洞的 exp 代码转换之前,先演示一下原始 python 代码的执行效果,具体如下:
开始转化格式:
此外,他还提供了该程序的使用方法。然而,每次 chatgpt 的回答都可能不完全相同。此前的回答中并没有详细说明函数的具体用法,但在另一个回答中给出了以下解释:(如果需要,可在问题中增加“并介绍函数的具体用法”)
最后进行代码调试后,发现无法立即使用,未能成功读取所需的文件内容:
那么就需要开始排错,以下是排错过程:
检查正则匹配后字符串是否为空:
检查返回包内容是否正常,有无所需内容,如下返回数据包显示正常:
判断正则表达式有问题,无法匹配到对应内容:
通过排查发现正则表达式中没有正确匹配,因此无法将文件的内容正确取出,做出以下修改,修改后内容具体如下:
修改前:
最终执行结果,完成 python—go 的转化:
前面我们已经成功将 python 格式的exp转换为了 go 语言格式,现在尝试将其转换为 goby 格式的 poc 和 exp。
由于 goby 使用的是基于 go 语言开发的自研漏洞框架,为方便用户使用,其中已有很多内置函数可供用户使用,所以只需要利用上述部分代码即可完成 poc 和 exp,以下是 exp 修改的大致说明与详细内容:
修改 import 内容:
由于生成的 exp 在命令行使用时需要手动输入参数:
那么在 poc 转化时,需要重新定义常量,并利用 goby 中的 httpclient.fixurl.ip 与 httpclient.fixurl.port 获取测试的 ip 和端口号,确定测试的文件路径 path:
接着在 poc 中添加条件判断语句,判断漏洞存在的特征,并返回 true(有漏洞):
最后删除多余的输出打印代码即可完成 poc 转化,如:
exp 转化时,需重新定义变量,利用 goby 中的 expresult.hostinfo.ip 与 expresult.hostinfo.port 获取测试的ip和端口号,利用 ss.params[filepath]. (string) 获取用户输入的 exp 参数——测试文件路径 filepath:
接着在 exp 代码中添加条件判断语句,判断 exp 是否执行成功,并输出 exp 执行结果,完成 exp 转化:
3.2 全自动编写在使用 chatgpt 与人工相结合编写后,我们进一步尝试使用它来撰写 goby 格式的 poc。
首先将 goby 格式的模板给出:
接着将漏洞的编号、产品、类型、url、漏洞文件、参数和判断成功条件给出,说明相关的字段格式,我们最终得到了下面的代码,它已经可以通过 goby 前端的编译,并可以成功地生成简单的 poc:
模型训练初步完成,继续使用第二个案例验证模型完善程度:
发现 name 字段还是存在格式错误,再次训练修改(若验证中 name 字段等输出正确,那么即可跳过此纠错步骤):
最后使用第三个案例进行验证最终的训练结果,训练成功:
将代码放入 goby 中,并填入缺少的漏洞描述信息(后续还可继续深入训练),运行效果如下:
0×04 自我学习当我们在利用 chatgpt 去帮助编写一个新鲜出炉的 0day 漏洞或者其他机密漏洞的检测 poc 这个过程当中,是否会导致程序注入或信息泄露等问题呢?也就是说当模型训练完成后,其他用户提问相关的内容,chatgpt 是否会直接将训练好的模型或数据直接输出呢?
为了验证 chatgpt 自我学习的猜想是否存在,分别通过“不同会话”与“不同账户”来进行训练。经过以下实践,得到的结论是 chatgpt 并不会进行跨会话与跨账号的自我学习,训练好的模型与数据是掌握在 openai 手中的,其他用户并不会得到相关的模型,所以目前还不存在相关信息数据泄露的安全风险,但日后的情况还需要根据 openai 采取的决策做判断。
4.1 不同会话比对将使用的模板(此处省略示意图)和漏洞信息给出,可以看到 poc 中的 name 和 desc ription 字段并没有按照上一个会话中的训练模式来进行填充,因此在不同会话当中 chatgpt 并不会自我学习,每个会话间的训练模型独立:
4.2 不同账号比对同样将模板(此处省略示意图)和漏洞信息给出,也可以看到 poc 中的相关字段并没有按照之前的训练模型来进行填充,由此可得知 chatgpt 并不会跨账号自我学习:
0×05 chatgpt3与4chatgpt4 已经更新上线,那么去使用 chatgpt4 进行同样的全自动编写训练和 chatgpt3 训练出来的模型有什么区别呢?答案是 chatgpt4 要比 3 更“聪明灵动”一些,模型的生成更为准确。
我们将所需要的各种信息给出,经过一次训练后(此处省略部分示意图),达到了下图中正确的效果:
另外我们进行了 10 轮的训练,针对模型中的name字段进行比对,来判断 chatgpt3 与 4 的 poc 编写准确率,发现均会出现概率性的出错情况,其中 3 的模型输出准确率要比 4 低一些,在一定情况下仍需进行纠错训练,如下表格所示:
0×06 总结总的来说,chatgpt 确实能够帮助完成一部分的工作,对于日常的工作例如编写漏洞 poc,可以利用它的代码转换能力加速编写;也可以将漏洞的详细信息给出,利用 chatgpt 训练合适的模型,直接输出一份简单的漏洞验证 poc 代码,更加便捷快速。但它所提供的回答内容并不一定能直接复制使用,还需要进行一些人工的修正来完善。另外目前我们也可以相对放心去使用 chatgpt,它并不会将单个用户的训练模型数据输出给其他用户来使用(不混淆会话可能是担心用户数据互相污染),但日后还需要针对 openai 总部所作出的决策来进一步判断。因此 chatgpt 的合理使用,可以辅助提高一定的工作效率,若日后可以再延续进一步的训练开发,比如是否可以利用其编写信息描述规范且较为复杂的 poc 甚至是 exp,或者将其工程化批量完成内容去探索更多的应用场景和潜力。
参考
[1] https://gobysec.net/exp
[2] https://www.exploit-db.com/exploits/14641
[3] https://zhuanlan.zhihu.com/p/608738482?utm_source=wechat_session&utm_medium=social&utm_oi=1024775085344735232
[4] 用chatgpt来生成编码器与配套webshell
文章来自goby社区成员:lpuff@白帽汇安全研究院,转载请注明出处。获取版本:https://gobysec.net本文作者:gobysec, 转载请注明来自freebuf.com
以上就是chatgpt 写 poc,拿下漏洞!的详细内容。