您的位置:首页 > 其它

ctf pwn 个人经验记录

2017-05-22 16:23 204 查看

前言

记录一下自己在做pwn的过程当中学到的一些东西,以前不知道的东西等等,碰到的坑也会记录在

这里,主要目的是帮助自己记录一下经验。

其实每一道题基本上能学到的新东西是有限的,记录下来避免什么时候想不起来。

顺序比较乱,基本上根据我做题的顺序定的,比较随意。

pwn

other place(not from ctf)

多用gdb调试,有思路可以先写出来调试一下看看效果再说

遇见pie考虑写malloc_hook,free_hook等,这些与malloc_state相关,也就是需要main_arena

smallbin, largebin等非fastbin在链表为空时指向自己,也就是指向main_arena中,可以用来泄漏main_arena,从而得到libc

hitcon-2016

babyheap

ubuntu 16.04后scanf的缓冲区会使用heap,超过大小的就会放入heap,接下来的scanf会从刚才

heap中的缓冲区取

使用read而不是readline的时候很容易因为读取的内容不够(比如最多本来可以读100个,但是我这边

只发了20个字节的时候)导致后面的内容被接上去,也就是两次send在远程只进行了一次read,而本来

想要的是两次read。方法是通过sleep或者raw_input使得不连起来发,隔开就可以了。

漏洞也可能位于输入输出函数

ichunqiu427-2017

smallest

使用srop可以用来更改寄存器的值,从而使得能够控制更多寄存器的值

环境变量位于栈顶,其中的字符串也位于栈中,可以用来获取大致的栈位置(比如需要可写地址的时候)

awd-pwn2

awd先补再写exp

bctf-2017

boj

system函数的参数如果可控,可以通过构造文件名来进行命令注入

babyuse

choice等输入可能位于栈上,atoi的时候只需要使用空格隔开,可以通过后面的内容控制参数

njctf

vegas

c语言的rand函数是可以预测的,只要和远程时间相同,1秒内同时开始rand的内容是一样的

0ctf-2017

EasiestPrintf

IO结构体(stdin, stdout, stderr)在程序关闭的时候会调用一些奇怪的函数,虽然不知道是哪个,但是反正可以试出来。。

那么就是可以通过修改IO结构体的虚表,来控制执行流,可以作为能拿到那三个特殊IO结构体位置

的时候,面对PIE的时候的特殊方案。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: