作为一只萌新Pwn选手,如何在CTF中苟活呢,下面带来全套指南。
CTF常见漏洞整理
缓存区溢出漏洞
漏洞产生原理
通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。常见的会造成缓存区溢出的函数有:1
2
3
4
5
6
7strcpy()
strcat()
sprintf()
vsprintf()
gets()
scanf()
memcpy()
最常见的手法是通过缓存区溢出运行一个用户shell
缓存区溢出攻击必要条件
- 能够在程序的地址空间中安排适当的代码
- 通过适当的初始化寄存器以及安排好的内存,让程序跳转到入侵者安排的地址空间执行
在程序的地址空间里安排适当的代码的方法
- 植入法
攻击者向被攻击的程序输入一个字符串,程序会把这个字符串放到缓存区中。字符串可以是可以运行的shellcode,缓存区可以存在任何地方:堆栈(stack,自动变量)、堆(heap,动态分配的内存区)和静态资料区(.bss) - 利用已经存在的代码
有时攻击者可以直接通过向现成的代码中传入参数就能获得shell。比如攻击代码要求执行“exec (“/bin/sh”)”,而在libc库中的代码执行“exec (arg)”,其中arg使一个指向一个字符串的指针参数,那么攻击者只要把传入的参数指针改向指向”/bin/sh”。 - return to libc
通过构造栈中地址使得返回地址指向库函数,通过向库函数中传入参数达到攻击目的。比如调用system(/bin/sh)