2个月没更新了blog,在0CTF2016
上被虐得一塌糊涂,闭关修炼pwn,终于在429ctf
上有了零突破,这是第一次在比赛中做出pwn。这标志着一个新的开始,加油!!!
对于一个reverser来说,学习pwn并不是很难,因为对汇编知识和系统架构已经有了一定的理解和掌握。一直未入门的原因是由于shellcode的构造太麻烦,练习不方便。和队友esrever10交流后,他介绍了几个很好用的工具(pwntools,capstone,ROPgadget等),这些工具给我带来很大的便利,可以愉快的练习了^_^。
pwntools顾名思义就是pwn方面的工具集,我最喜欢的是asm
和disasm
,借助于capstone
的多平台反汇编能力,可以轻松地对汇编进行转换:
1 | $ asm "mov eax, ebx; push eax; pop ebx;" |
而且可以指定特定平台,这样想要什么功能的 opcode 还不是信手拈来。而在构造exploit代码,pwntools提供的框架也十分的方便快捷。
1 | #!/usr/bin/env python |
远程和本地切换,只需要一个语句的改变;接收信息和发送信息十分方便;获得shell后可以进行手工交互(interactive),这个设计太棒了。
开始学习复习各种原理和练习,栈溢出攻击很容易理解,但实践操作起来有些困难(ASLR,nx等),之后看了蒸米的《一步一步学ROP》系列,按照里面的讲解,自己再做一遍,对ROP有了一定理解。现在如果能发现程序的漏洞,也能写出exp来了。
练习平台
入门资料
- 一步一步学ROP之linux_x86篇
- 一步一步学ROP之linux_x64篇
- 一步一步学ROP之gadgets和2free篇
- 一步一步学ROP之Android ARM 32位篇
- Stack Smashing On A Modern Linux System