CTF学习笔记——ret2text

这篇具有很好参考价值的文章主要介绍了CTF学习笔记——ret2text。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CTF学习笔记——ret2text

原理

ret2text 应该算是PWN里面比较简单的题型了,这种题型有个显著特征,就是会有个很明显的后门函数,也就是system("/bin/sh"),我们只需要将我们的程序跳转到后门函数即可。不过我们控制执行程序已有的代码的时候也可以控制程序执行好几段不相邻的程序已有的代码 (也就是 gadgets),这就是我们所要说的 ROP。

不过程序也可能会开启某些保护,我们需要想办法去绕过这些保护,这些我们就到后面来介绍。

题目

[SWPUCTF 2021 新生赛]gift_pwn | NSSCTF

分析

首先用Checksec分析二进制文件

CTF学习笔记——ret2text,CTF,学习,笔记,CTF,PWN

我们发现这个程序仅仅打开了NX(堆栈不可执行保护),也就是在堆栈上的数据不可执行,不能直接通过将shellcode放入堆栈然后执行程序,打开后门。

amd64说明这个程序是64位的,i386-32是32位程序;little说明这个程序是小端的,这个主要影响的是我们程序对于数据的解读方式。

反编译

将其使用IDA64(如果是32位就用IDA)打开该二进制程序,可能第一次打开就是这个样子,我们按下空格可以看到完整的汇编代码,同时按下F5就可以查看反编译的结果。

CTF学习笔记——ret2text,CTF,学习,笔记,CTF,PWN

我们在左侧函数列表找到main函数,常规来说这个是程序的入口,我们会从这里开始看程序的执行流程,反编译后大概就是这样,执行了一个vuln函数。

CTF学习笔记——ret2text,CTF,学习,笔记,CTF,PWN

双击vuln函数之后发现了一个明显的数组越界(栈溢出),如下所示,read读入了0x64个字节,远超栈的大小,这边我们双击buf查看一下栈结构。

CTF学习笔记——ret2text,CTF,学习,笔记,CTF,PWN

栈结构如下所示,0x10就是数组的大小,然后后面就是保存的rbp(32位是ebp)以及返回地址。s是存储的rbp,代表这个函数结束以后rbp要被修改为什么。

r是返回地址,代表这个函数结束以后程序会跳转到哪个地址继续执行,我们大多数情况下都是利用这个返回地址来进行操作。

CTF学习笔记——ret2text,CTF,学习,笔记,CTF,PWN

由于栈的生长方向是由高地址往低地址增长的,我们可以看到左边是变量所在的相对位置,以s为基准。

在read读入字符的时候,第一个字符会被放在相对地址是0x10的位置,第二个字符会被放在0x0f的位置上,当我们读入的字符超过了buf的长度,那么会接着向下(高地址)存放,这个时候就会覆盖掉原来保存在高地址的s和r,以让程序跳转到不同的地方。

read函数可以读入0x64个字符,而buf的长度为16,s为8,r为8,可以修改s和r,(在32位程序中s和r为4,64位程序中s和r为8,这是由计算机位数决定的,一个字符长度是一个字节,一个字节的长度是8位(即长度为8的二进制数),32/8 = 4,64/8 = 8)

在左边的函数列表我们可以看到一个gift函数,很显然,我们需要跳转到此处。

CTF学习笔记——ret2text,CTF,学习,笔记,CTF,PWN

它的作用是打开一个shell,这很明显是一个后门函数

那么如果我们可以控制vuln函数中的r的地址为gift函数的起始地址,那我们就可以跳转到这个后门函数,然后可以执行我们想要的命令。

开始编写我们需要的利用脚本

利用

from pwn import *

p = remote("node4.anna.nssctf.cn",28377)
payload = b'a' * 16 + b'a' * 8
payload += p64(0x4005B6)
p.send(payload)
p.interactive()

CTF学习笔记——ret2text,CTF,学习,笔记,CTF,PWN文章来源地址https://www.toymoban.com/news/detail-759260.html

到了这里,关于CTF学习笔记——ret2text的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 字符串溢出(pwn溢出)--ret2shellcode

    有些技术再也记不住了。所以记录笔记,下面这个文档写的蛮好的,不过我实际情况和他稍有不同,特此记录 pwn溢出入门案例, 信息安全 https://saucer-man.com/information_security/177.html 这里面的例子是常见的栈溢出,例子代码就是如上文中的代码,为了测试方便,如上面作者一样,

    2024年02月02日
    浏览(31)
  • kernel-pwn之ret2dir利用技巧

    ret2dir 是2014年在USENIX发表的一篇论文,该论文提出针对 ret2usr 提出的 SMEP 、 SMAP 等保护的绕过。全称为 return-to-direct-mapped memory ,返回直接映射的内存。 在 SMEP 与 SMAP 等用于隔离用户与内核空间的保护出现时,内核中常用的利用手法是 ret2usr ,如下图所示(图片来自论文)。

    2024年02月16日
    浏览(25)
  • 华科信息系统安全作业: 利用ret2libc实现控制流劫持

            main()函数分析         要进行劫持的目标程序如下          主程序这里三段代码的功能都是进行简单的安全防护           我们可以找到 geteuid() 与 setreuid() 函数的相关解释,简单来说,euid(有效用户)是创建程序的用户id,uid(真实用户)是运行程序过

    2024年02月04日
    浏览(27)
  • 【HUST】信息系统安全:Ret2libc多函数调用,ASLR两种情况(1)

    Ret2libc:Return to libc,顾名思义,就是通过 劫持控制流使控制流指向 libc 中的系统函数,从而实现打开shell等其他工作。 在本次作业中,我们的目标是通过运行stack.c程序来访问系统上的/tmp/flag程序的内容,其中,可以看到stack.c的程序的源代码如下:         其中不难发现rea

    2024年02月04日
    浏览(25)
  • CTF学习笔记一——RSA加密

    RSA 公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开

    2024年02月06日
    浏览(24)
  • CTF入门学习笔记——Crypto密码(古典密码)

    🚀🚀这篇笔记是我对自己初步学习CTF的一个小总结,主要涉及了Crypto板块的古典密码,这部分内容比较简单,利用一些工具加上观察分析一般都能解决,但是古典密码一般会和编码结合起来一起考察,所以此篇笔记主要起到一个分析总结的作用。 🚀🚀凯撒密码算是古典密

    2024年02月09日
    浏览(32)
  • call指令和ret指令【笔记+详解】

       在高级语言中,常有主程序调用其他子程序,子程序还可以调用子程序…,比如在C语言中,在main主函数里调用cube函数,该函数被执行完后返回main函数,然后程序继续往下执行,如下:   在汇编语言中也有类似的这种机制,能实现主程序调用子程序。这就要使用cal

    2024年02月03日
    浏览(29)
  • Vulnhub靶机渗透之新手入门 JIS-CTF入门靶场-学习笔记

    目录 学习前言 准备工作 一、寻找目标主机(信息收集) 二、敏感文件 三、Getshell上传木马 用蚁剑进行Getshell 四、寻找Linux密码进行ssh连接 五、连接SSH最后一步 六、总结 vulnhub是个提供各种漏洞平台的综合靶场,可供下载多种虚拟机进行下载,本地VM打开即可,像做游戏一样去

    2024年02月14日
    浏览(33)
  • 【ARM64 常见汇编指令学习 21 -- ARM RET 与 ERET】

    请阅读 【嵌入式开发学习必备专栏 】 在 ARMv8 架构中, RET 指令用于从函数或者过程返回。它主要负责从当前过程跳转回调用者,并恢复调用者的程序计数器 (PC) 的值。 语法: Xn 是一个可选的寄存器,通常为 X30 (也称为 LR ,链接寄存器),其中包含返回地址。如果没有指

    2024年04月10日
    浏览(70)
  • 攻防世界ctf题目easyupload做题笔记。

    刚刷完upload-labs靶场,做做ctf题目,发现自己掌握的知识并不牢固。做了半天没有解出来,最后还是看别人的题解做出来的。写下做题过程,也就是wp吧。为了方便以后复习巩固。 本题的主要考点为利用fastcgi的.user.ini特性进行任意命令执行 这里需要绕过的点如下 检查文件内

    2024年02月01日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包