大家好,我是以色列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足够了:

旗帜是我的:

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