如何在Checkpoint通过网络测试

大家好,我是以色列IT和安全性HackerU高等学校策展人Nikita Kurtin

以色列领先的信息安全公司Checkpoint今年夏天发布了一系列网络测试。

任务分为六类:

•逻辑
•网站
•编程
•联网
•倒车
•惊喜

每个方向有两个任务。 在这篇文章中,我将告诉您如何在接下来的三个测试中仅进行四个测试:

Checkpoint已经设法赢得了我的尊重和兴趣,因此我决定接受这些挑战。 但是,由于工作原因,我只能负担12个任务中的8个(来自四个不同类别)。 我设法解决了其中的7个问题。

挑战赛于2018年9月底正式结束。

图片

因此,现在,凭着明确的良知,我可以逐步告诉您如何突破以解决以下问题:

•逻辑挑战“ PNG ++”
•网络挑战“机器人又回来了”
•网络挑战赛“迭戈画廊”
•编程任务“谨慎的步骤”
•编程“拼图”的任务
•网络挑战“乒乓球”
•联网挑战“协议”

挑战:PNG ++

说明:

该(链接到加密的PNG文件) 图像是使用自定义密码进行编码的。

我们设法在这里阅读了大部分代码(链接到python代码)。
不幸的是,有人将咖啡缓慢地洒在整个key_transformator.py上。
您能帮我们解密这张图片吗?

Python代码:

图片

加密逻辑如下:

1.将密钥长度(密钥大小)设置为4个字节

2.读取“ img”变量中“ flag.png”文件的字节

3.在文件中添加填充,至四个的第一个最接近的倍数。 填充等于丢失的字节数。 例如,如果文件长度为29个字节(缺少3个),则添加三个字节,十进制值为3(ASCII 0x03)。 或者,换句话说,填充字节不能为空(ASCII 0x00),因为其十进制值为零,这并不意味着填充。

4.用四个随机的大写字母([AZ])设置开始键。

5.对文件中的所有字节执行相同操作,一次加密四个字节的链

一个 文件中的每个字节都与密钥中的字节争吵
b。 密钥不断转换为另一个密钥,key_transformator.transform(key)负责此操作
c。 加密的字节添加到enc_data

6.在encrypted.png中输入enc_data(加密字节)

首先,我检查了PNG格式标头,发现前八个字节如下:

[137,80,78,71,13,10,26,10]

我获取了加密文件的前八个字节,并用这八个字节将它们扭曲了:

图片

第一个块的键结果如下:
[85,80,82,81]

第二块-像这样:
[86,81,83,82]

由于每个后继密钥都是使用前一个密钥(key = key_transformator.transform(key)动态生成的,因此我理解了算法:在前一个密钥的每个字节上添加一个:
85-> 86
80-> 81
82-> 83
81-> 82

然后我意识到挑战的名字隐藏了一个令人生厌的暗示。

我写了两个“辅助函数”:

•“ nextKey”,它根据上一个键恢复下一个键
•“ nextChar”,它恢复下一个字母,并且在大多数情况下,如果它位于字节边界内,则仅增加一个(255)

图片

我将原始的4个字节[85、80 82、81]转换为字母:“ UPRQ”,然后将算法返回

图片

该标志是在解密文件中指定的:

图片

挑战:机器人的回归


说明:

机器人很酷,但请相信我:他们的访问权限应受到限制! 检查一下(链接)

跟随链接,您将看到一个专门介绍机器人的页面。 基本上,所有内容都建议您检查“ robots.txt”文件的存在。

图片

通过将./robots.txt添加到url,我们得到以下信息:

图片

我检查了./secret_login.html并遇到了注册页面

图片

接下来,我检查了表单的源代码以找到密码确认并看到了以下Javascript:

图片

似乎在确认该值后,将其发送到授权函数,该函数使用btoa函数(Javascript中的base64解码函数)对传递的值进行解码,然后将其与字符串“ SzMzcFQjM1IwYjB0JDB1dA ==”进行比较。

我解码了这一行

图片

我将结果值插入了密码字符串。 宾果!

图片


挑战:迭戈画廊

说明:

我最近开始开发一个平台来管理猫的照片并保护我的flag.txt。 请检查我的系统(链接到注册表)。

为了避免在安全系统中造成麻烦,例如嵌入SQL代码的能力,我想出了自己的方案。

它的简短描述在这里(链接到该图)

报名表格:

图片

预设电路:

图片

设置测试用户名和密码后,便可以访问“ Diego”猫的公共画廊。

自从我注册为普通用户以来,我发现也许我需要找到一种方法来提升特权的PE(特权升级)。 通过查看针对注册用户的方案,我发现普通用户和管理员之间的区别在于方案的第三部分,中间用三个破折号隔开。

估计如果第一个值(用户名)是第一部分,第二个(密码)是第二部分,则角色将在具有当前权限的用户进入后立即由系统分配。

例如:

START |||第一个值|||第二个值|||用户(通过Web服务添加)||| END

我的有效载荷如下:

•第一个值:“ niki ||| niki ||| admin ||| END \ nSTART |||其他”
•第二个值:“其他”

这可能会生成以下日志行:

START ||| niki ||| niki |||管理员||| END
START |||其他|||其他|||用户||| END

之后,我能够以管理员身份登录并获得完整权限:

图片

按下按钮只会激活一个警告,警告标志是安全的。
但是,在URL内您可以阅读:

35.194.63.219/csa_2018/diegos_gallery/_nwryqcttstvs/admin-panel/index.php吗? 查看= log.txt

通过URL明确暗示了LFI(本地文件包含)

我试过了

35.194.63.219/csa_2018/diegos_gallery/_nwryqcttstvs/admin-panel/index.php?view=flag.txt

旗帜是我的。

图片

挑战:谨慎的步骤

说明:

这个(文件链接)是我们发现的一堆档案。 我们确定秘密标记隐藏在它们内部的某个位置。
我们绝对确定要查找的数据隐藏在每个文件的注释部分中。
您可以仔细地在文件之间查找标志吗?
祝你好运

解压缩文件后,您将获得一个名为“ archives”的目录,其中包含两千个文件,名为“ unzipme。[Number]”。

图片

我使用binwalk程序检查了第一个文件。 这是程序给我的:

图片

是的,因此在评论部分,我们同时拥有字母和数字。 再次提示?

最初,我考虑过是否应该将字母与该zip文件中给定的索引连接起来,并检查下一个已经具有索引245的文件。

但是,这里出现了一个惊喜:第二个文件不是zip,而是rar格式。

图片

因此,为了得到评论,我不得不“取消”它:

图片

我的逻辑是通过binwalk运行文件,如果遇到RAR,请将其解压缩以获取注释。 否则,直接查看评论部分以了解进一步的操作。

我的第一个猜测:数字是文件索引(每个文件的编号从0到1999)。 但是,我发现有些数字是负数,这意味着它们不能成为索引。

第二个猜测:这个数字是飞跃,很可能是负数。 对于每个数字,我都需要跳到下一个文件。 我知道,如果我的代码不断跳转到下一个计算的文件,则会以周期的形式创建一个小的陷阱,并且我的代码将陷入无限循环。 所以我写了一个有帐户限制的python代码。 经过几次测试,我发现数字120足够了:

图片

旗帜是我的:

图片

我在下一篇文章中描述的其他三个,请阅读,尝试,我很高兴收到您的评论

Source: https://habr.com/ru/post/zh-CN429112/


All Articles