GPT-4,有人说「好用」,当把一段杂乱的文本内容分享给它时,它会自动调优,输出一段合理、逻辑通顺的语句;有人说「没什么帮助」,它生成的代码片段经常引入了不存在的库,无法快速地投入到生产环境中;也有人说「不好」,怎么都绕不开它一本正经胡说八道的圈。
在不同场景下,GPT-4 的优劣有所差异,但究竟如何,还得切身体验了才知道。近日,美国调查新闻网站 The Intercept 信息安全部总监、DDoSecrets 顾问 Micah Lee 心血来潮,拿着 GPT-4 去 CTF(Capture The Flag,中文一般译作 夺旗赛 ,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式)上 炸了一把场 。
庆幸的是,CTF 中(几乎)没有作弊这一说。在 GPT-4 的帮助下,他不仅获得了更多的 旗帜 ,也有一些不同的 GPT-4 的使用经验想要分享。接下来,我们不妨一起来看一下。
Micah Lee 表示, 如果没有 GPT-4 的帮助,我肯定只能得到有限的几个旗帜。对于 GPT-4 不能独立解决的问题,它提供了非常有用的提示,或者快速编写了一些脚本,而这些脚本对于我自己来说,是非常乏味或耗时的。
我还发现有几种情况,ChatGPT 可能会直接报错并拒绝给我答案。我想这是当我明显地想在黑客方面得到帮助时,才会发生的情况。例如,当我问它如何编写一些可以绕过特定的 XSS 过滤器的 JavaScript 代码,并且使用明确表示我正在尝试绕过 XSS 过滤器的语言时,它就输出失败并且报错。似乎 ChatGPT 有一些名义上的保护措施来防止人们将其用于恶意黑客攻击,但如果你只是询问详细的技术问题(可用于进攻或防御),它往往会回答这些问题。
之所以选择这个三个挑战,Micah Lee 解释道,部分原因是给 GPT-4 提供回答问题所需的背景并不容易描述。例如,你不能向 GPT-4 发送一个 30MB 的 APK 文件,然后要求它帮助你进行逆向工程,或者把一个网络应用的所有源代码复制到 GPT-4 中,然后要求它找到漏洞。不过,你可以把所有问题划分成小模块,然后逐个向 GPT-4 提问。
在这个挑战中,Micah Lee 在大赛会场上四处寻找可以扫描的 QR 码。在 Shamir 秘密共享方案中,一个秘密被分成一定数量,如果一个人拥有这些部分的答案,他们就可以解密。
src=在这个背景下,秘密被分成了 7 个部分,阈值为 5。最终,Micah Lee 转了一圈之后,找到了其中 6 个部分。然后他简单地要求 GPT-4 来解决问题:
震惊了。特别是因为这个挑战实际上包括一个与 base-27 有关的非常棘手的部分,但 GPT-4 在第一次尝试时就解决了所有问题,没有额外提示。
不过,Micah Lee 表示, 我不知道这是什么,而且我已经有十多年没有用 Perl 写过任何代码了,所以我问 GPT-4。
GPT-4 给出了详细的解释,「这个名为 flag.bin 的文件是一个二进制文件,其中包含使用 Perl Storable 模块序列化的数据」。
src=还不错。也许 GPT-4 还能直接编写一个 Perl 脚本,这样我们也就可以看到那个文件里有什么。
当 Micah Lee 在电脑上运行这个时,他想着一直要谨慎操作,但同时让我们看看 GPT-4 是否能帮助解决这个问题:
Micah Lee 成功更新了 script.pl,但他不想直接在电脑上运行它。 ( GPT-4 很好,分别三次警告有安全风险)。所以,Micah Lee 决定在 Docker 容器中运行这个脚本。
于是,Micah Lee 创建了一个新的 Ubuntu 容器,安装了正确的 Perl 依赖项,然后运行它:
这个脚本输出了 1000 多行代码,显示了这个 Perl 对象的值。大多数键值对似乎都是垃圾,但有两个键很有意思:flag 是一个二进制数据块,另一个 decode_flag 显然是一个 Perl 函数。听起来,也许 flag 是被编码的,Micah Lee 认为可以调用 decode_flag 解码它。
没想到,程序运行失败,并显示一条错误消息,指出它至少需要 1 个参数。这是第一个障碍(shell 障碍),但它很容易解决—— Micah Lee 只是通过一个论点:
没想到的是,下一个障碍很难。这个程序希望 Micah Lee 运行 /shurdles,而不是 ./shurdles。那么该怎么做,再次问问 GPT-4:
GPT-4 没过多久迅速给出了回应:添加 /home/ctf 到我的 PATH 中,这样我就可以运行 shurdles 了,尽管它并不完美。
程序的表面看起来好像是在运行打开 /shurdles,但实际这个 shell 函数正在打开的是 /home/ctf/shurdles,所以这是进程看到的第一个参数。为此,Micah Lee 要求更多帮助:
紧接着,GPT-4 回应了一个出乎意料的答案,用 Micah Lee 自己的话来讲,就是 我甚至从来没听过 exec -a 这个命令 。
过了这道坎之后,下一个挑战随之而来。熬过了那个嘈杂!为了节省时间,Micah Lee 再次划分问题,交给了 GPT-4 给答案:
GPT-4 回答道,「你可以通过使用换行符 n 将环境变量 HACKERS 设置为 hack the planet 的值,这让每行都在单独的一行里。下面是具体的操作方法 …..」
来到下一个障碍。当 Micah Lee 问 GPT-4 如何让他当前的工作目录看起来像:/run/. — !!,而不需要实际创建该文件夹并对其进行修改。
当 Micah Lee 进一步询问 GPT-4,一个命令如何学习其工作目录的不同方式。GPT-4 的建议是,它可以使用 PWD 环境变量,也可以用 getcwd 函数。当 Micah Lee 问 getcwd 如何在没有 PWD 环境变量的情况下学习工作目录时,它给出了一个详细的答案:
src=Micah Lee 表示,这些 Linux 实现细节涉及了他的知识盲区。要知道,对于开发者而言,他所需要做的事情就是对 GPT-4 提问,并能看懂这款模型输出的代码内容,也不一定完全要掌握相关语言的每个技术点。不过,GPT-4 有时候会自信地说胡话。
在这里,由于 Micah Lee 最初找错了 tree,当他意识到这一问题时,他也发现所有 CTF 大赛的用户都有 /run 的写入权限,所以可以直接创建文件夹并对它进行更改。
对于这个错误,Micah Lee 并不能理解,究竟是必须打开文件或是其他东西。于是,他再次求助 GPT-4:
有什么办法可以让我在运行产生这个错误的程序时,让它打开一个额外的资源,这样 file descriptor 3 就会被打开?
运行结果让跨越这个障碍的进度条再次多了一些。根据提示,接下 Micah Lee 要做的便是需要在 /tmp/fd3_output.txt 输入 1337 字节的内容。
Micah Lee 表示虽然他自己知道该怎么做,但是想试试 GPT-4 是否会速度更快一些。于是,他提问:
如何将时区设置为 America/Los_Angeles,以便我运行的下一个命令将其识别为时区?
很轻松地成功了。现在,系统又提示让找到 shurdles-helper。对于这个问题。Micah Lee 自己动手解决了,他创建一个新文件夹,将一个调用的可执行文件放入 shurdles-helper 其中,然后将其添加到 PATH 中。
成功!进入下一个障碍。根据提示,系统希望有 /home/ctf/.cache/shurdles 路径的存在。Micah Lee 再次自己直接创建了一个文件解决了这个问题。
至此,借助 GPT-4,Micah Lee 在全球最高技术水平和影响力的 CTF 竞赛中取得不错的成绩。而 GPT-4 在不断地提示词之下,虽然其中有些小差错,但也输出了不少非常实用的代码,能为开发者的知识盲区提供一些技术意见。可以说,稍加利用,GPT-4 在辅助编码上将是一股不容忽视的力量。
不过,对此也有网友表示, 这就像在数学考试中使用计算器一样。在某些测试中虽然这项工具是被允许的,但是有些赛事中确实是明令禁止的。这也会让大赛失去一些竞技和趣味 。为此,你怎么看?
以上便是辅助攻略相关内容,如果对你有所帮助,记得收藏本页方便下次阅读。
【推荐阅读:】曾经我也是一个大佬 而今连卢克都打不了