Linux 栈耗尽



进程是操作系统进行资源分配的基本单位,线程是CPU进行调度和分派的基本单位。我们通常意义下的进程包括:由二进制代码组成的应用程序、单线程、分配给该应用程序的一组资源(如内存、文件等),栈在wikipedia上叫callstack调用栈,并不是孤立的有进程栈这个说法,线程也有栈,不过大多时间是共享父进程分配的堆内存空间。无论是线程栈还是进程栈,都有一定的大小,空间耗尽将会触发Segment Fault。

Continue reading

Pwnable.tw BookWriter

Continue reading

House of orange🍊



House Of Orange 是AnglyBoy在hitcon-2016中出的一道Pwn题
题目中使用了一种全新的攻击手段House-Of-Orange,利用Unsotred bin attack攻击_IO_List_all,劫持控制流。

Continue reading

ICQ Baidu December Pwn



what_the_fuck

Continue reading

ICQ Baidu November Pwn



pwnme

Continue reading

Environ



在linux应用程序运行时,内存的最高端是环境/参数节(environment/arguments section)
用来存储系统环境变量的一份复制文件,进程在运行时可能需要。
例如,运行中的进程,可以通过环境变量来访问路径、shell 名称、主机名等信息。
该节是可写的,因此在格式串(format string)和缓冲区溢出(buffer overflow)攻击中都可以攻击该节。
*environ指针指向栈地址(环境变量位置),有时它也成为攻击的对象,泄露栈地址,篡改栈空间地址,进而劫持控制流。

Continue reading

Pwnable.tw start-orw-calc



start

题目的binary很小
没有开启NX,考虑注入shellcode,思路大致如下:

  • 1.泄露栈地址leak stack
  • 2.控制shellcode,由于程序溢出最多60个字节,shellcode尽量控制在30个字节以内,否则会被截断
  • 3.计算offset,跳转到stack上执行shellcode

orw

程序写shellcode地址,之后跳转到shellcode执行,shellcode地址在bss段上,所以程序开启的canary没有意义

由于限制了只能够使用open,read,write等syscall,所以也就是需要自己写shllcode,大致流程如下:

由于flag比较长,至少0x30才能够接收到完整的flag

calc



reverse

题目实现了一个简单的计算器解释器,是通过两个栈来实现的,一个栈保存运算的结果,另一个栈保存所有的运算符。

Continue reading