「 PWN 」
May 09, 2020
Words count
200k
Reading time
3:02
前言
之前一直有2.31的题目出现在赛场上,趁着这个机会,整理一波2.31下的tcache机制和利用技巧,以学习的目的为主。
一、check机制和利用技巧说明
1、fastbin的double free
只要填满了7个tcache,下一步就是放入到fastbin中,接着如果存在uaf的话,可以直接121实现和2.23一样的double free效果
2、tcache的double free
我们先来看下2.31下的源码:关于tcache结构体和key结构体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16... |
Read article
「 PWN 」
January 03, 2020
Words count
4.3k
Reading time
4 mins.
一、做栈题的心得:
1、看栈的大小
2、判断栈溢出的字节数(够的话直接栈上操作再跳回main函数再次操作,不够的话,栈迁移到bss上)
命令:cyclic n cyclic -l 报错(4位)
3、如果开了canary,先泄露出canary(覆盖低字节或者格式化字符串泄露),记得函数调用完要回填canary
4、如果开了pie,先利用write或者puts函数(覆盖0截断)或者格式化字符串泄露基地址
5、NX开了的话,一般不管,没开的话直接填shellcode,可以手写也可以工具直接生成
6、一般...
Read article
「 PWN 」
January 03, 2020
Words count
29k
Reading time
26 mins.
一、堆的分析:
通过系统调用brk和mmap实现malloc内存分配:
thread有个arena空间,可以申请chunk
arena的个数是跟系统中处理器核心个数相关的:
1 2 3 4
| For 32 bit systems: Number of arena = 2 * number of cores + 1. For 64 bit systems: Number of arena = 8 * number of cores + 1.
|
多Arena的管理,可能就会有阻塞,资源的竞争关系
3种数据结构:
...
Read article
「 PWN 」
January 03, 2020
Words count
2.8k
Reading time
3 mins.
缓冲区:stack、heap
1、栈溢出:当前输入的字符的数量大于buf的大小,造成溢出,ret地址被覆盖,造成任意地址跳转
来道题目直接看看:
这里很清晰,一个main函数,调用puts函数和read函数和puts函数,下面简单的例子演示下参数入栈:
单步走:先调用puts函数,先将参数“give me some thing?”压入栈中
执行完puts函数,借助栈中的0x8048489可回到下一条将要执行的指令的地址(return地址),回到了现场,此过程pop出0x8048489(因...
Read article
「 PWN 」
January 03, 2020
Words count
61k
Reading time
56 mins.
一、初级栈溢出系列
从现在开始温习栈溢出,从初级栈溢出到高级栈溢出到花式栈溢出都重温一遍,主要结合题目练习加深巩固。
一般来说,实现栈溢出,都是因为读入的字节数超过了buf允许的大小,导致ret地址被覆盖,我们的最终目标都是实现调用system(“/bin/sh”)函数去getshell,过程花样可以千奇百怪,但是总有规律可以寻找~
1、第一步找危险函数。
输入函数:
gets(&buf) 直接读取一行,忽略’\x00’ ,一看没有字符数的限制,那肯定是200%的溢出~
read(0,&...
Read article
「 PWN 」
January 03, 2020
Words count
9.3k
Reading time
8 mins.
一、对保护机制的探索:
本文针对刷过的题目,介绍一些常见的保护机制以及破解方法,这里一个个介绍。
1、checksec
工欲善其事必先利其器,这个指令用于检查题目的保护机制以及判断是32位还是64位的程序,专业地讲是用来检查可执行文件属性,例如PIE, RELRO, PaX, Canaries, ASLR, Fortify Source等等属性。 举个栗子:
checksec + 文件名,可实现检查功能:
2、Arch表示位数,amd64-64-little表示该程序是64位的,32位的是i386...
Read article
「 PWN 」
January 03, 2020
Words count
15k
Reading time
13 mins.
一、中级栈溢出总结:
来到中级栈溢出这里,当64位的程序很难得到有用的rop链时(参数在rdi,rsi,rdx中,通常是很难凑齐这3个的)就需要我们用程序现有的链子去构造,找找看:
重点介绍一个64位的很好用的ROP链子,这个链子是根据
这两个函数的汇编写出来的,我们可以去看看:
就是这里了,看到loc_4006A6和loc_400690两个位置,这里怎么利用呢?
首先先读懂这段汇编的意思:首先执行抬一次栈的操作,接着要pop6个参数到相应的寄存器中,然后是ret,接着看到上面mov那里,很...
Read article
「 PWN 」
January 03, 2020
Words count
14k
Reading time
13 mins.
一、花式栈溢出介绍:
花式栈溢出又叫栈迁移技术,是指在可以写的payload的长度不佳的情况下(一般只有ebp和ret位置可以写,没有多的了,或者再多给两行可以写的),这样的话我们需要进行栈迁移,具体做法有如下两种:
1、迁移到栈本身,2、迁移到bss段中,3、迁移到堆块(后期补充)
先来看看迁移到栈的情况:
来一道题目:
这里堆栈不可执行保护,其他的没开,然后栈溢出发现只能溢出8字节,32位的话,就是覆盖到ebp和ret的位置,很局限,这里想到栈迁移,于是搞一波操作:
第一步:迁移到本身...
Read article
「 PWN 」
January 03, 2020
Words count
19k
Reading time
17 mins.
题目一:
read_note:
一波分析:
这里开了栈溢出保护,堆栈不可执行,然后还有内存地址随机化,只有got还可以写,适应了就好~
动态链接,库是libc.so.6,可以得到,再去看看ida吧:
这里程序大概的流程也出来了,就是让你输入路径(字符串长度为5其实根本不可能),然后能打开该路径下的文件(就是个幌子,没用的),跳过,输入的字符长度大于5,就false,继续执行程序,要写note的大小note_length,还有note的内容,内容在thinking_note这里,会被输出来,然后如...
Read article
「 PWN 」
January 03, 2020
Words count
16k
Reading time
14 mins.
一、题目
pwn1:
64位保护全开,ida分析一波:
会发现常规菜单题,然后有3个函数,一个个看吧:
malloc:
这里可以看到最多7个堆块,而且堆块大小限定在0x90到0x2333,当堆块量等于7时,貌似有UAF的free,但是其实没有什么用,因为bss上并不会存储chunk的地址,所以正常的malloc,同时可以打印地址,这里直接打印出了堆地址和libc地址
简单的free函数,正常没有漏洞
edit:
这是漏洞点所在,会发现这里有个任意地址写,8字节的数字,0xcafebabe...
Read article