-
-
[原创] KCTF 2019 Q3 第十一题 Writeup by Nu1L
-
发表于: 2019-9-25 22:04 6056
-
ssh pwn@154.8.174.214 -p 10022 (passwd: pwn)
逆一下功能:
0x1336 分配一个堆 stat=1 x=-1 ptr 最多7个
0x1337 两个参数a,b b.x = a; b.x_stat = a.stat;
0x1338 一个参数 a.stat = 0xdeadbeef big_master=1 bigmaster最多一个
0x1339 一个参数 a.stat = 1 big_master = 0
0x133a 三个参数 idx buf len 若idx.stat != 0xdeadbeef且idx.x != -1且合法 copy_from_user(a.ptr, buf, len) 若ptr不存在则新分配一个
0x133b 三个参数 idx buf len 需求跟前面的差不多 但是是copy to user
0x133c 一个参数a 若a.stat != 0xdeadbeef或a.x = -1 gg 若a.x_stat=0xdeadbeef free a.ptr, a.ptr=0, a.x = -1
0x133d 三个参数abc 要求a.stat==0xdeadbeef c.x_stat==0xdeadbeef c.stat!=0xdeadbeef a!=b b==c.x 会free c.ptr, 好像可以UAF
造一个轮子
先分配3块,然后设定0是bigmaster,设定1和2的x是0,将0的bigmaster撤销,再设定1是bigmaster,然后就可以用0x133d功能free 2,获得悬垂指针
PoC
打开一个ptmx,分配tty结构体刚好使用0x400的块,占用了那个悬垂指针,可以leak
修改tty operations 实现劫持控制流
有smap smep,直接ROP不太好组,可以使用一次执行机会去执行一个set memory x,把这一页内存变成可执行的,然后写Shellcode关smap smep然后ROP
// 不知道为什么5.2的linux还是可以用cr4关
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)