开坑CTF-pwn-入门

时间:2022-09-11 17:05:08

0x00 扯淡

pwn,大概是pwn to own的意思,通过二进制/系统调用等方式获得目标主机的shell。

之前软件安全课上学过windows上的栈溢出,格式化字符串等漏洞,弹过几个窗,但是没接触过linux的二进制相关问题,也没玩过shell这种控制。

考研之前的最后一段时间学一下pwn,目标是几天后的TSCTF。

 

0x01 工具

Linux上目前还没有找到windows下OD+IDA这么棒的组合,目前使用的几个比较顺手的工具。不过还是不能在纯Linux环境搞。

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

  2.objdump -S pwn0 | less    //查看汇编代码,查看相关的函数信息。具体可以Read The Fucking Manual

  3.转到windows开IDA F5,看伪代码,搞清程序结构

    IDA 有linux版,可以试一试。

    IDA 还有远程调试功能,可以试一试。

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

  5.gdb+peda,据说是神器,不太会用。平时写代码都是printf调试。

    b main 下断点

    p system 查看函数位置

    ni = od F8;si = od F7 一个next,一个step

    x 查看任意位置内存。x \10xw %sp 查看栈的值。

    layout asm|reg  分屏查看汇编代码|寄存器状态,比较有用。不过很丑。

    加上peda有比较好的体验

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

  7.pwntools 不是很懂为什么都用python做pwn题,明明c/c++更直接。无聊了可以开发一个c/c++pwn库,名字想好了叫cpwn。

 

0x02 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,推荐使用寄存器传参。

 

0x03 shellcode

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

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

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

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

 

---------------------------------------------------------------------------------

入门博客:

http://0x48.pw/2016/11/03/0x26/?utm_source=tuicool&utm_medium=referral

 

 

--具体利用下次在聊