您的位置:首页 > 大数据 > 人工智能

plaidctf-2016 Pwn试题小结

2016-11-21 22:46 281 查看
回顾了一下今年plaidctf Pwn部分的题目,感觉还是蛮有意思的,值得研究一下。

1.unix_time_formatter-76

最简单的一道题,考点是UAF。说是UAF但是其实根本就不算是真正的UAF利用,无非就是对释放的内存块进行同大小的占位。因为程序中会把内存块的内容作为system函数的参数,所以只要重新占位并写入/bin/sh就可以了,这道题还是相当简单的。

2.butterfly-150

这道题比较有趣。详细的看了一下。

int __cdecl main(int argc, const char **argv, const char **envp)
{
setbuf(_bss_start, 0LL);
puts("THOU ART GOD, WHITHER CASTEST THY COSMIC RAY?");
if ( fgets(&buf, 50, stdin) )
{
v4 = strtol(&buf, 0LL, 0);
v5 = v4;
v6 = v4 >> 3;
bianhuan = (v4 >> 3) & 0xFFFFFFFFFFFFF000LL;
if ( mprotect((void *)bianhuan, 4096uLL, 7) )
{
perror("mprotect1");
}
else
{
v3 = 1;
*(_BYTE *)v6 ^= 1 << (v5 & 7);
if ( mprotect((void *)bianhuan, 0x1000uLL, 5) )
{
perror("mprotect2");
}
else
{
puts("WAS IT WORTH IT???");
v3 = 0;
}
}
}
}


这道题的所有代码就只有这么多,并不存在我们通常认识的漏洞,此题的考点是位翻转的利用

buf是栈上空间,简单的来说就是获取一个整数,然后把这个数作为地址去做一个位运算。有趣的是在位运算之前对地址增加w权限,运算之后又关闭w权限。
由这个权限变化我首先想到的就是对指令进行写操作,因为一般来说没有写权限的地址太少了,题目特意给了写权限就是让我们去写指令。其中对EIP的劫持也很有趣,需要对opcode有比较深入的了解。

具体的利用步骤参见:http://r0p.club/2016/butterfly/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: