[0CTF-2018] blackhole

Posted on 2018, Apr2, Monday 23:16:42 • Tagged with 0ctf-2018, ctf-pwn, pwn-stack

分析

日哦,一看这题,64位,只有一个read有溢出,syscall禁用了一堆,只留下 open,read,,mprotect,,exit,拿头做题。(懒得放图了,没啥意思)

难道又要将mprotect的地址解析出来去调用???

等等,这题有libc,为啥有libc呢

开了一晚上的脑洞后,惊讶的发现了一件事情:

最后1byte为0x80时,指向的是alarm,如果是0x85就是syscall!

只需调用read,覆写alarm的got表的最后1byte为0x85,就可以通过syscall调用mprotect了!

啥,x64不会调用3个参数的函数?init函数的那几个gadget了解一下

就这样很轻易的让bss段变成可执行的了 …


Continue reading

[0CTF-2018] babystack

Posted on 2018, Apr2, Monday 22:44:15 • Tagged with 0ctf-2018, ctf-pwn, pwn-stack

分析

这题,开门有惊喜

整个题就一个read,也只有这有一个溢出点,然后,啥都没了。

emmmmm,同学,你听说过安利吗(雾)

不对,你听说过got表吗,好的,听说过

那,同学你 听说过解析解析got表的函数嘛,就是把动态链接库的函数地址写到got表里面的家伙

emmmmmm,这啥啊,咋回事啊(黑人问号.jpg)

那么,ret2_dl_runtime_resolve 了解一下吧

好的,你已经了解了ret2_dl_runtime_resolve,那么这个题就变得十分简单了 …


Continue reading

[XDCTF-2017] easyeasy

Posted on 2017, Oct6, Friday 18:16:27 • Tagged with xdctf-2017, ctf-pwn, pwn-stack

分析

拿到题目后F5,发现是个菜单题,并且给出了libc

linux下如何加载指定的so文件,可以见: Linux 加载动态链接库原理分析

先挑重点说吧

sub_400B4B

在这里 qword_6020D0 这个全局变量被分析出了奇怪的语法

考虑它是一个结构体一样的东西,根据F5手动创建一个结构体

创建后F5便正常了许多

在阅读源码后可以得知,在执行 sub_400985 时可以将 fun4 的最后一个byte重写,也就是说在

(*(void (**)(void))(*qword_6020D0)->fun4)();

可以执行到 0x400A**

在翻看汇编代码时发现 …


Continue reading