PWN入门-ret2shellcode-2
解题
本题出处为[HNCTF 2022 Week1]ret2shellcode checksec
可以看到她是一个64位的程序,并且开启了NX保护
附件
打开附件发现本题附有源码
这里可以看到buff未被初始化,并且还有一个mprotect函数
IDA
这里可以看到s[256]在栈上,同时buff在源码内未被初始化,buff在.bss段上,并且s[256]到栈底的距离是0x100
.bss段通常用于存储未初始化的全局变量和静态变量。编译器会将这些未初始化的变量存储在.bss 段,并在程序启动时将它们初始化为0 在程序开启NX保护的时候,常使用mprotect()函数攻击,因为它能够修改内存的执行权限,从而绕过 NX 保护,使攻击者注入的恶意代码得以执行。
mprotect函数
addr:需要更改权限的内存区域的起始地址(通常要对齐到页边界)。
len:需要更改权限的内存区域的长度。
prot:新的内存访问权限,例如 PROT_READ | PROT_WRITE | PROT_EXEC,表示同时拥有读、写、执行权限。
使用GBD调试
因为buff字段在main函数上,所以先下断点到main函数下
寻找buff所在位置
查看0x4040a0的权限
发现只有rwp的权限
因为是使用mprotect函数进行攻击,在下断点到0x401220(call_mprotect)
再次查看0x4040a0的权限
此时因为mprotect函数还没有执行,所以权限没有改变,单步跳过一下
再次查看0x4040a0的权限
这里可以看到权限已经修改了,说明猜想成立
编写exp
获取flag