not_the_same_3dsctf_2016
老样子查看程序开启的保护

可以看到程序是32位的程序开启了nx保护,把程序放入ida编译一下
shift+f12可以看到flag.txt,我们用ctrl+x跟随一下

看到程序,直接想到的就是通过溢出获得flag然后用write去读取flag,但是不知道为什么一直失败,正好看到程序中还有mprotect函数可以给段权限

所以我们用mprotect方法来做
因为我们需要用read覆盖mprote函数的ret地址所以我们需要三个pop和ret的地址

在ida中ctrl+x可以看到.got.plt的起始地址

所以我们就用这段地址来赋予权限,通过read去运行我们的shellcode(如果有大神知道为什么要用这段内存希望可以指导一下)
完整exp如下:

注意:p32(7)的意思是给.got.plt函数可读可写可运行的权限
获得flag

结束

浙公网安备 33010602011771号