黑客比赛的节目是什么(用 GPT⑷ 在黑客大赛上“炸场”:没有完全会 Linux、Perl,似乎也没有关系了!)gpt 这都可以?
互联网天下1直都是充满了令人惊奇和没有断变革的地方,今天就让我们1起聊聊最近在这个领域发生的1些重...
互联网天下1直都是充满了令人惊奇和没有断变革的地方,今天就让我们1起聊聊最近在这个领域发生的1些重要事件吧。
本文经授权转自公众号CSDN(ID:CSDNnews)作者 | Micah Lee,编译 | 苏宓GPT⑷,有人说「好用」,当把1段杂乱的文本内容分享给它时,它会自动调优,输出1段合理、逻辑通顺的语句;有人说「没什么帮助」,它生成的代码片段经常引入了没有存在的库,无法快速地投入到生产环境中;也有人说「没有好」,
怎么都绕没有开它1本正经胡说八道的圈在没有同场景下,GPT⑷ 的优劣有所差异,但究竟如何,还得切身体验了才知道近日,美国调查新闻网站 The Intercept 信息安全部总监、DDoSecrets 顾问 Micah。
Lee 心血来潮,拿着 GPT⑷ 去 CTF(Capture The Flag,中文1般译作“夺旗赛”,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的1种比赛形式)上“炸了1把场”庆幸的是,。
CTF 中(几乎)没有作弊这1说在 GPT⑷ 的帮助下,他没有仅获得了更多的“旗帜”,也有1些没有同的 GPT⑷ 的使用经验想要分享接下来,我们没有妨1起来看1下1、解决问题取出错并存的 GPT⑷Micah Lee 表示,“如果没有
GPT⑷ 的帮助,我肯定只能得到有限的几个旗帜对于 GPT⑷ 没有能独立解决的问题,它提供了非常有用的提示,或者快速编写了1些脚本,而这些脚本对于我自己来说,是非常累味或耗时的我还发现有几种情况,ChatGPT 可能会直接报错并拒绝给我答案。
我想这是当我明显地想在黑客方面得到帮助时,才会发生的情况例如,当我问它如何编写1些可以绕过特定的 XSS 过滤器的 JavaScript 代码,并且使用明确表示我正在尝试绕过 XSS 过滤器的语言时,它就输出失败并且报错。
似乎 ChatGPT 有1些名义上的保护措施来防止人们将其用于恶意黑客攻击,但如果你只是询问详细的技术问题(可用于进攻或防御),它往往会回答这些问题”综上,Micah Lee 基于以下3个技术挑战进行了经验分享:。
Shamir 秘密共享 perckelShell 障碍之所以选择这个3个挑战,Micah Lee 解释道,部分原因是给 GPT⑷ 提供回答问题所需的背景并没有容易描述例如,你没有能向 GPT⑷ 发送1个 30MB 的 APK 文件,然后要求它帮助你进行逆向工程,或者把1个网络应用的所有源代码复制到 GPT⑷ 中,然后要求它找到漏洞。
没有过,你可以把所有问题划分成小模块,然后逐个向 GPT⑷ 提问2、Shamir 秘密共享Shamir 秘密共享(Shamir Secret Sharing,SSS)是1种加密算法,它允许没有同的各方通过持有*shares* 来共同共享单个秘密的所有权。
在这个挑战中,Micah Lee 在大赛会场上四处寻找可以扫描的 QR 码。在 Shamir 秘密共享方案中,1个秘密被分成1定数量,如果1小我拥有这些部分的答案,他们就可以解密。
在这个背景下,秘密被分成了 7 个部分,阈值为 5最终,Micah Lee 转了1圈以后,找到了其中 6 个部分然后他简单地要求 GPT⑷ 来解决问题:以下是 Shamir 秘密共享的部分内容:Share 1 of 7 (min 5): (x1, y1) = (1, 12214173319090360239218007) Field prime = 2^89 - 1 Flag = CTF{secretasletters} Secret -> base 27 a = 1, b = 2, ... z = 26 (base 27)
Share 3 of 7 (min 5): (x3, y3) = (3, 272214528378786743506941922) Field prime = 2^89 - 1 Flag = CTF{secretasletters} Secret -> base 27 a = 1, b = 2, ... z = 26 (base 27)
Share 4 of 7 (min 5): (x4, y4) = (4, 404905998942651879217397287) Field prime = 2^89 - 1 Flag = CTF{secretasletters} Secret -> base 27 a = 1, b = 2, ... z = 26 (base 27)
Share 5 of 7 (min 5): (x5, y5) = (5, 589183787842889173793388269) Field prime = 2^89 - 1 Flag = CTF{secretasletters} Secret -> base 27 a = 1, b = 2, ... z = 26 (base 27)
Share 6 of 7 (min 5): (x6, y6) = (6, 338337360147368973687481536) Field prime = 2^89 - 1 Flag = CTF{secretasletters} Secret -> base 27 a = 1, b = 2, ... z = 26 (base 27)
Share 7 of 7 (min 5): (x7, y7) = (7, 479528534189573769684386994) Field prime = 2^89 - 1 Flag = CTF{secretasletters} Secret -> base 27 a = 1, b = 2, ... z = 26 (base 27)
我如何解密?在提出这1问题以后,GPT⑷ 给出了它的回答:
这个答案有用吗?为了验证,Micah Lee 把 GPT⑷ 给出的 Python 脚本复制到了 Decrypt.py 里面,并运行了1下:$ python3 decrypt.pyCTF{perasperaadastra}
震惊了特别是因为这个挑战实际上包括1个取 base⑵7 有关的非常棘手的部分,但 GPT⑷ 在第1次尝试时就解决了所有问题,没有额外提示最终,Micah Lee 用 GPT⑷ 生成的答案,提交了旗帜并得到了分数。
3、perckel
在 CTF 大赛上,当系统给出这个界面时,Micah Lee 了这个名为 flag.bin 的文件,然后试图运行它来弄清楚这个文件是什么$ file flag.binflag.bin: perl Storable (v。
0.7) data (network-ordered) (major 2) (minor 11)没有过,Micah Lee 表示,“我没有知道这是什么,而且我已经有十多年没有用 Perl 写过任何代码了,所以我问 GPT⑷。
”这个文件是什么?flag.bin: perl Storable (v0.7) data (network-ordered) (main 2) (minor 11)GPT⑷ 给出了详细的解释,「这个名为 "flag.bin "的文件是1个二进制文件,其中包含使用 Perl Storable 模块序列化的数据」。
还没有错。也许 GPT⑷ 还能直接编写1个 Perl 脚本,这样我们也就可以看到那个文件里有什么。所以,Micah Lee 进1步要求 GPT⑷:写1个 Perl 脚本,用于显示该文件中的内容。
成功了!在没有懂 Perl 语言的情况下,GPT⑷ 生成脚本,Micah Lee 把脚本另存为 script.pl 并尝试运行它:$ perl script.plCant eval, please set
$Storable::Eval to a truevalueat /System/Library/Perl/5.30/darwin-thread-multi⑵level/Storable.pm line
421, at script.pl line 9它希望能够执行任意代码当 Micah Lee 在电脑上运行这个时,他想着1直要谨慎操作,但同时让我们看看 GPT⑷ 是否能帮助解决这个问题:无法评估,请在 /System/Library/Perl/5.30/darwin-thread-multi⑵level/Storable.pm 第 421 行,在 script.pl 第 9 行,将 $Storable::Eval 设为 True 值。
很好, GPT⑷ 修复了这个脚本Micah Lee 成功更新了 script.pl,但他没有想直接在电脑上运行它(GPT⑷ 很好,分别3次警告有安全风险)所以,Micah Lee 决定在 Docker 容器中运行这个脚本。
于是,Micah Lee 创建了1个新的 Ubuntu 容器,安装了正确的 Perl 依赖项,然后运行它:root@22b72f43fc3d:/src# perl ./script.pl Name "Storable::Eval"
used only once: possible typo at ./script.pl line 9.$VAR1 = {shqa => iryaeuxfc,jwjepylpxecq => yfebe
,--snip--iruvqhgdnfstz => smkohnqw,qcotpliscszql => efzhu,decode_flag => sub { "DUMMY" },htxj => pmifolpyh
,lftq => pxqqgeqy,adbsjrhouqhgg => srndfdboqqmfc,avarqfgzrufc => thgzdhdstum,pdeqoerfqxbro => grugrmrocnekt
,ujlw => ooxnyiyu,flag => ��;���@��(�P��@HTX�Т�@��ڂ���@(!k�8�@��Q���@�,��}F�@0Z��W�@��R�J�@���JM��@�#*,�@��E~���@�A����@���Y]��@�v���@@�N
b�@���co6�@������@�� �9�D�|� �@�\Mi�e�@i��^9�@,lquykkphh
=> bjyrsce,ruybrycyo => othebxvqngu,--snip--zxyybaaawc => kbzr,pojhbzugch => dqxiybapwepfh };
root@22b72f43fc3d:/src#这个脚本输出了 1000 多行代码,显示了这个 Perl 对象的值大多数键值对似乎都是垃圾,但有两个键很有意思:flag 是1个二进制数据块,另1个 decode_flag 显然是1个 Perl 函数。
听起来,也许 flag 是被编码的,Micah Lee 认为可以调用 decode_flag 解码它$data 对象有两个有趣的键,flag 是二进制数据,另1个 decode_flag 是1个函数更新脚本调用该函数 decode_flag 并传入flag 值。
Micah Lee 更新了脚本并再次运行它:root@22b72f43fc3d:/src# perl script.plName "Storable::Eval" used only once: possible typo at script.pl line
9.Decoded flag: CTF{ooohhh_purrrrl_<3}4、Shell 障碍
这个挑战提供了1个 Web Terminal 的链接。Micah Lee 可以通过 netcat 进入该主机,并获得1个 shell。上面是 Web Terminal 的样子:
以下是1些命令的输出(为清楚起见,对主机名进行了编辑):ctf@shurdles:~$ ls -ltotal 2220-r-x--x--x 1 root ctf 2270141 Apr 162020 shurdles
Micah Lee 的主文件夹shurdles 有1个调用的可执行文件他尝试运行它:ctf@shurdles:~$ ./shurdles shurdle 0failed: expected at least 。
1 argument没想到,程序运行失败,并显示1条错误消息,指出它至少需要 1 个参数这是第1个障碍(shell 障碍),但它很容易解决——Micah Lee 只是通过1个论点:ctf@shurdles。
:~$ ./shurdles ASDFshurdle 2failed: I expected to be called /shurdles, not ./shurdles这奏效了于是,Micah Lee 便。
进入了下1个障碍没想到的是,下1个障碍很难这个程序希望 Micah Lee 运行 /shurdles,而没有是 ./shurdles那么该怎么做,再次问问 GPT⑷:我有1个 bash shell有1个名为 /home/ctf/shurdles 的可执行文件。
我可以通过以下命令来运行它:/home/ctf/shurdles或者通过更改为文件夹 /home/ctf,然后运行:./shurdles我可以使用此命令运行它,而无需创建符号链接吗?/shurdlesGPT⑷ 没过多暂迅速给出了回应:添加
/home/ctf 到我的 PATH 中,这样我就可以运行 shurdles 了,尽管它并没有完美。
没有过,Micah Lee 还是试过了,但没有用:ctf@shurdles:~$ export PATH=$PATH:/home/ctfctf@shurdles:~$ shurdles ASDFshurdle
2failed: I expected to be called /shurdles, not shurdles所以,Micah Lee 回到 GPT⑷ 并恳求额外的帮助可以运行:shurdles但是我该如何运行:
/shurdles在这种情况下,GPT⑷ 告诉 Micah Lee 要创建1个 symlink ,尽管这需要root。
然而,Micah Lee 没有 root 权限,所以他要求 GPT⑷ 想想其他办法有没有办法在没有使用 symlink 链接和没有使用 root 权限的情况下做到这1点?然后 GPT⑷ 想出了1个 Micah Lee
自己可能没有想到的好主张:使用 shell 函数。
没有幸的是,这仍然没有起任何作用:ctf@shurdles:~$ function /shurdles() { /home/ctf/shurdles "$@"; }ctf@shurdles:~$ /shurdles ASDF
shurdle 2 failed: I expected to be called /shurdles, not /home/ctf/shurdles程序的表面看起来好像是在运行打开 /shurdles
,但实际这个 shell 函数正在打开的是 /home/ctf/shurdles,所以这是进程看到的第1个参数为此,Micah Lee 要求更多帮助:这是1个好主张,但我实际上需要 argv 的第1个值是 /shurdles。
紧接着,GPT⑷ 回应了1个出乎意料的答案,用 Micah Lee 自己的话来讲,就是“我甚至从来没听过 exec -a 这个命令”。
Micah Lee 还是决定用这个答案来试1试,没有过,因为他的电脑上并没有 vim 或 nano因此,出于懒惰,Micah Lee 只是要求使用 echo 保存 shurdles_wrer.sh 的命令。
如何使用 echo 而没有是文本编辑器来创建 shurdles_wrer.sh 脚本?GPT⑷ 给了确切的代码:
Micah Lee 对这段代码稍微修改了1下,他将脚本存储在 /tmp/wrer.sh 而没有是 /home/ctf/shurdles_wrer.sh 中,因为他没有 /home/ctf 的
写入访问权限,但这段代码仍然起作用了:ctf@shurdles:~$ echo -e #!/bin/bash\nexec -a /shurdles /home/ctf/shurdles "$@" > /tmp/wrer
.shctf@shurdles:~$ chmod +x /tmp/wrer.shctf@shurdles:~$ /tmp/wrer.sh ASDF shurdle 3failed: I expected the environment variable
"HACKERS" to look like hack the planet on separate lines过了这道坎以后,下1个挑战随之而来熬过了那个嘈杂!为了节省时间,Micah Lee 再次划分问题,交给了 GPT⑷ 给答案:。
如何将环境变量“HACKERS”设置为“hack the planet”,并让每句都在单独的1行上?GPT⑷ 回答道,「你可以通过使用换行符 "\n "将环境变量 "HACKERS "设置为 "hack the planet "的值,这让每行都在单独的1行里。
上面是具体的操作方法.....」
没有出意外,GPT⑷ 再次有效提供了可用的代码:ctf@shurdles:~$ export HACKERS=$hack\nthe\nplanetctf@shurdles:~$ /tmp/wrer.sh ASDF
shurdle 5 failed: expected workdir "/run/. -- !!"来到下1个障碍当 Micah Lee 问 GPT⑷ 如何让他当前的工作目录看起来像:/run/. -- !!,而没有需要实际创建该文件夹并对其进行修改。
GPT⑷ 有1些好主张,包括运行 export PWD=/run/. -- !! ,没有过这段代码没有起作用当 Micah Lee 进1步询问 GPT⑷,1个命令如何学习其工作目录的没有同方式GPT⑷ 的建议是,它可以使用 PWD 环境变量,也可以用 getcwd 函数。
当 Micah Lee 问 getcwd 如何在没有 PWD 环境变量的情况放学习工作目录时,它给出了1个详细的答案:
Micah Lee 表示,这些 Linux 实现细节涉及了他的知识盲区要知道,对于开发者而言,他所需要做的事情就是对 GPT⑷ 提问,并能看懂这款模型输出的代码内容,也没有1定完全要掌握相关语言的每个技术点。
没有过,GPT⑷ 有时候会自信地说胡话在这里,由于 Micah Lee 最初找错了 tree,当他意识到这1问题时,他也发现所有 CTF 大赛的用户都有 /run 的写入权限,所以可以直接创建文件夹并对它进行更改。
在这里,Micah Lee 自己解决了这个障碍问题ctf@shurdles:~$ mkdir /run/. -- !!ctf@shurdles:~$ cd /run/.\ --\ \!\!/ctf@shurdles:。
/run/. -- !!$ /tmp/wrer.sh ASDFshurdle 6 failed: fd 3 isnt open没有过,紧接着,系统便报错了——“fd 3 isnt open”对于这个错误,Micah Lee 并没有能理解,究竟是必须打开文件或是其他器材。
于是,他再次求助 GPT⑷:
根据 GPT⑷ 的解答,Micah Lee 知晓他正在运行的程序需要打开1个文件,所谓 fd 3 是指 file descriptor 3那解决方案是什么,当以上面疑问向 GPT⑷ 提问时:有什么办法可以让我在运行产生这个错误的程序时,让它打开1个额外的资源,这样 file descriptor 3 就会被打开?。
GPT⑷ 建议可以使用 exec 3 命令:
在对这个命令1无所知的情况下,Micah Lee 还是尝试着运行了:ctf@shurdles:/run/. -- !!$ exec 3>/tmp/fd3_output.txtctf@shurdles:/run/
. -- !!$ /tmp/wrer.sh ASDFshurdle 6failed: expected fd 3 to be a file of 1337 bytes in length运行结果让跨越这个障碍的进度条再次多了1些。
根据提示,接下来 Micah Lee 要做的便是需要在 /tmp/fd3_output.txt 输入 1337 字节的内容Micah Lee 表示虽然他自己知道该怎么做,但是想试试 GPT⑷ 是否会速度更快1些。
于是,他提问:如何使 /tmp/fd3_output.txt 长度为 1337 字节?GPT⑷ 如预期中那样,推荐使用 dd 命令:
当 Micah Lee 运行 dd 命令时,/tmp/fd3_output.txt 中内容的确实现了 1337 字节但是当他运行 exec 3>/tmp/fd3_output.txt 时,意外出现了,系统。
截断了文件,显示零字节那该如何解决这个问题呢?如何修改命令:exec 3>/tmp/fd3_output.txt所以当它创建文件 /tmp/fd3_output.txt 时,如何有 1337 字节长?
Micah Lee 用了 GPT⑷ 输出的代码试过了...但没有用ctf@shurdles:/run/. -- !!$ dd if=/dev/zero of=/tmp/fd3_output.txt bs=。
1 count=1337 && exec 3>/tmp/fd3_output.txt1337+0 records in1337+0 records out1337 bytes (1.3 kB, 1.3 KiB) copied,
0.00219604 s, 609 kB/sctf@shurdles:/run/. -- !!$ /tmp/wrer.sh ASDFshurdle 6failed: expected fd 3 to be a file of
1337 bytes in length这其中哪块出现了偏差?把上面这个问题抛给 GPT⑷:当我运行上面代码时:dd if=/dev/zero of=/tmp/fd3_output.txt bs=1 count=1337 && exec 3>/tmp/fd3_output.txt
似乎 /tmp/fd3_output.txt 仍然是 0 字节$ ls -l /tmp/fd3_output.txt -rw-r--r-- 1 CTF CTF 0 23 月 06 日 17:3 /tmp/fd<>_output.txt。
GPT⑷ 对于自己输出错误的内容立刻进行了道歉,并给了另1个解决方案:
运行试试:ctf@shurdles:/run/. -- !!$ dd if=/dev/zero of=/tmp/fd3_output.txt bs=1 count=1337 && exec 3<>/tmp/fd
3_output.txt1337+0 records in1337+0 records out1337 bytes (1.3 kB, 1.3 KiB) copied, 0.0021625 s, 618 kB/s
ctf@shurdles:/run/. -- !!$ /tmp/wrer.sh ASDFshurdle 7failed: tz Local != America/Los_Angeles又1个障碍被跨过去了!接下来,按照运行的结果,就是更新1下时区:
如何将时区设置为 "America/Los_Angeles",以便我运行的下1个命令将其识别为时区?GPT⑷ 的答案:
复制代码,运行1下:ctf@shurdles:/run/. -- !!$ exec 3<>/tmp/fd3_output.txt && TZ="America/Los_Angeles" /tmp/wrer.sh ASDF
shurdle 8failed: could not find shurdles-helper很轻松地成功了现在,系统又提示让找到 shurdles-helper对于这个问题Micah Lee 自己动手解决了,他创建1个新文件夹,将1个调用的可执行文件放入 shurdles-helper 其中,然后将其添加到 PATH 中。
ctf@shurdles:/run/. -- !!$ mkdir /tmp/binctf@shurdles:/run/. -- !!$ echo -e #!/bin/bash\necho helper > /tmp/bin/shurdles-helper
ctf@shurdles:/run/. -- !!$ chmod +x /tmp/bin/shurdles-helperctf@shurdles:/run/. -- !!$ export PATH=/tmp/bin:$PATH
ctf@shurdles:/run/. -- !!$ exec 3<>/tmp/fd3_output.txt && TZ="America/Los_Angeles" /tmp/wrer.sh ASDF
shurdle 9 failed: expected /home/ctf/.cache/shurdles, does it exist?成功!进入下1个障碍根据提示,系统希望有 /home/ctf/.cache/shurdles 路径的存在。
Micah Lee 再次自己直接创建了1个文件解决了这个问题ctf@shurdles:/run/. -- !!$ mkdir -p /home/ctf/.cachectf@shurdles:/run/. -- !!$ touch /home/ctf/.cache/shurdles
ctf@shurdles:/run/. -- !!$ exec 3<>/tmp/fd3_output.txt && TZ="America/Los_Angeles" /tmp/wrer.sh ASDF
shurdle 9failed: /home/ctf/.cache/shurdles was modified in the last day, sorry它也成功了现在,它需要将时区设置为 America/Los_Angeles。
提问:你是如何更新文件的修改时间戳的?GPT⑷ 回答:
好吧,很简单Micah Lee 把它设置为1个月前:ctf@shurdles:/run/. -- !!$ touch -t 202303231430 /home/ctf/.cache/shurdlesctf@shurdles
:/run/. -- !!$ exec 3<>/tmp/fd3_output.txt && TZ="America/Los_Angeles" /tmp/wrer.sh ASDFCongratulations!!!
CTF{you_made_it_past_the_hurdles}最后,Congratulations!5、写在最后至此,借助 GPT⑷,Micah Lee 在全球最高技术水平和影响力的 CTF 竞赛中取得没有错的成绩。
而 GPT⑷ 在没有断地提示词之下,虽然其中有些小差错,但也输出了没有少非常实用的代码,能为开发者的知识盲区提供1些技术意见可以说,稍加利用,GPT⑷ 在辅助编码大将是1股没有容忽视的力量没有过,对此也有网友表示,“这就像在数学考试中使用计算器1样。
在某些测试中虽然这项工具是被允许的,但是有些赛事中确实是明令禁止的这也会让大赛失去1些竞技和趣味”为此,你怎么看?参考:https://news.ycombinator.com/item?id=35683265
https://micahflee.com/2023/04/capturing-the-flag-with-gpt⑷/本文转自公众号“CSDN”,ID:CSDNnews---END---推荐↓↓↓
喜欢这篇文章的小伙伴记得关注收藏点赞哦!
当前非电脑浏览器正常宽度,请使用移动设备访问本站!