欢迎加入晨星!
脏牛漏洞提权 核心原理 简单来说,脏牛漏洞的核心原理是:利用一个竞争条件,在不应该被写入的文件上,强行执行写入操作 写时复制(COW)机制 正常情况下,Linux 内核的写时复制机制是为了优化内存使用而设计的。当多个进程共享同一个只读内存页 时,它们都指向这个内存页。 一旦其中一个进程试图修改这块内存,内核不会让它直接修改,而是会为这个进程复制一份内存页,然...
Canary绕过总结(二)
Canary绕过总结(一)
32 位栈迁移 ROP 话不多说,直接上题(BUUCTF) 漏洞代码如下: 缓冲区 s 能构成溢出,但是 ret 太小了构造不了完整的 ROP 当缓冲区溢出空间不足以布置完整的 ROP 链时,利用栈迁移扩展攻击空间 在 32 位中关键指令是 leave; ret 主要用于 改变 ESP,让程序跳转到新的栈地址 因为 leave 会 将 esp 设为 ebp,...
仅有 sh ROP 话不多说,直接上题(BUUCTF) 反编译代码要先输入 administrator 通过验证 其中有三个选项以及一个隐藏选项 先看隐藏选项,它将 src 值给了 dest 最后打印 在第一个选项中发现这个 src 值是有我们决定的最多 128 字节 看 dest 缓冲区明显存在栈溢出,同时左边 plt 表中有 system 函数可直接调用...
64 位 ROP 话不多说,直接上题(BUUCTF) 扔进 IDA64 中反编译,发现调用了一个函数,进去看看 缓存区 buf 大小居然为 200,肯定存在溢出 双击 buf 可以算出需要 136 个字节垃圾数据 没有给后门函数,但是给了相关字符串,需要构造 ROP 64 位系统还格外需要一个 pop rdi; ret 指令,使用工具 ROPgadget 获...
32 位 ROP 话不多说,直接上题(BUUCTF) 32位 IDA 反编译 啊哈,一眼存在栈溢出 查看内存需 140 个字节覆盖 Shift + F12 查看字符串,有可利用函数与字符串,构造 ROP 在 plt 表中拿到 system 地址 32 位中调用 system 函数时需要传入一个将来的返回地址,这个返回地址随意,但必须要有,返回地址后面则是参数...
Read 栈溢出 话不多说,直接上题(BUUCTF) 放入 64 位 IDA 中反编译 注意看 read 函数的第三个参数,它决定我们输入的长度,而这个地址是由 scan 决定的 也就是说长度是我们可控制的 看内存可以看到离 ret 差 24 个字节 dq 占 8 个字节 找到后门函数 如果看不到地址往前拉一下,Star 就是起始地址 构造 payload ...
Gets 栈溢出(32 位程序返回) 话不多说,直接上题(BUUCTF) 扔进 IDA32 中反编译,直接给出了 Gets 在左边看到有一个 get_flag 函数,进去看看 可以看到 if 条件成立后就能读取 flag 了 回头去看 v4 缓存区的栈情况 首先填充 56 个字节垃圾数据 argc 就是 a1,argv 就是 a2 注意的一点是获取 flag...
Gets 栈溢出(变量覆盖) 话不多说,直接上题(BUUCTF) IDA64 反编译 追踪看到 gets v1 的下面就是 v2,通过溢出改为 v2 的值使条件成立 注意:浮点数要转十六进制 from pwn import p = remote(node5.buuoj.cn, 29455) payload = b a 44 + p64(0x4134...