ctf pwn 个人经验记录

前言

记录一下自己在做pwn的过程当中学到的一些东西,以前不知道的东西等等,碰到的坑也会记录在
这里,主要目的是帮助自己记录一下经验。

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

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

pwn

other place(not from ctf)

  1. 多用gdb调试,有思路可以先写出来调试一下看看效果再说
  2. 遇见pie考虑写malloc_hook,free_hook等,这些与malloc_state相关,也就是需要main_arena
  3. smallbin, largebin等非fastbin在链表为空时指向自己,也就是指向main_arena中,可以用来泄漏main_arena,从而得到libc

hitcon-2016

babyheap

  1. ubuntu 16.04后scanf的缓冲区会使用heap,超过大小的就会放入heap,接下来的scanf会从刚才
    heap中的缓冲区取
  2. 使用read而不是readline的时候很容易因为读取的内容不够(比如最多本来可以读100个,但是我这边
    只发了20个字节的时候)导致后面的内容被接上去,也就是两次send在远程只进行了一次read,而本来
    想要的是两次read。方法是通过sleep或者raw_input使得不连起来发,隔开就可以了。
  3. 漏洞也可能位于输入输出函数

ichunqiu427-2017

smallest

  1. 使用srop可以用来更改寄存器的值,从而使得能够控制更多寄存器的值
  2. 环境变量位于栈顶,其中的字符串也位于栈中,可以用来获取大致的栈位置(比如需要可写地址的时候)

awd-pwn2

  1. awd先补再写exp

bctf-2017

boj

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

babyuse

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

njctf

vegas

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

0ctf-2017

EasiestPrintf

  1. IO结构体(stdin, stdout, stderr)在程序关闭的时候会调用一些奇怪的函数,虽然不知道是哪个,但是反正可以试出来。。
    那么就是可以通过修改IO结构体的虚表,来控制执行流,可以作为能拿到那三个特殊IO结构体位置
    的时候,面对PIE的时候的特殊方案。
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值