【PWN】pwn入门

0x01 前言

今天pwnable.kr不知道什么原因网站挂掉了,pwnable.tw对于我又太难,每题做的我很难过,听从小伙伴的建议,决定从ctf的pwn入手。

0x02 工具

  1. file pwn0           //查看文件格式,i386,x86_64等

  2. objdump -S pwn0 | less   //查看汇编代码,查看相关的函数信息。

  3. 转到IDA F5看看伪代码

  4. edb,类似windows上的OD,不过小细节上还是不行,操作不方便。

  5. gdb+peda
    b main 下断点
    p system 查看函数位置
    ni = od F8;si = od F7 一个next,一个step
    x 查看任意位置内存。x \10xw %sp 查看栈的值。
    layout asm|reg 分屏查看汇编代码|寄存器状态

  6. windows subsystem of linux //目前可以用来objdump,编些小代码,脚本。

  7. pwntools

0x03 Linux汇编

Linux和Unix使用的是AT&T风格的汇编,一开始不太适应。而windows使用了Intel风格的汇编。从外形上看区别如下

  1. 操作赋值方向。
AT&T:mov 1,eax  

Intel:mov %eax,$1

2.前缀。

AT&T:mov 1,eax  

Intel:mov %eax,$1

3.后缀。

AT&T:movb %al,%bl         //指令后可跟b(byte),w(word=2b),l(long=4b)表示字节数。此外还有其他更  复杂的扩展。

此外,对于ELF文件,windows下IDA反编译的汇编代码是Intel风格的,Linux下objdump是AT&T风格的。

函数传参的方式,在i386都是压栈传参数的;到了x64,推荐使用寄存器传参。

0x04 shellcode

一些简单的题直接跳转到目标函数,就可以读取flag文件了。这类题覆盖返回地址即可。

其他题,需要执行指令拿shell,即编写shellcode。

当获取任意地址读写能力时,即可写入shellcode,再执行此处的代码即可。

shellcode可以读取flag,更一般的可以用pwntools中的shellcraft。

以上内容参考http://www.cnblogs.com/helica/p/6798915.html

你可能感兴趣的:(【PWN】pwn入门)