自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 house_of_orange

知识这个题目是一种手法,就叫house of orange应对情况是题目没有free函数,而且可以修改top chunk的size。house of orange的条件//1.修改topchunk size后,top addr+top size = mem page(内存页对齐0x1000倍数)//2.top size inuse bit = 1//3.布置好后申请chunk size > top size然后就会把修改size后的top chunk放入unsortedbin中。此时

2021-12-04 19:45:00 198

原创 lemon(IO_leak)

分析函数main先输入yes可以进一个游戏,因为rand没有用srand进行初始化,所以是一个定值, 这里输入1111,即可进入,然后他会将flag读到栈上,并且泄露flag+0x40的地址后三位。之后开启沙箱,进入堆界面。addadd会先申请一个0x20大小的pre_chunk来管理chunk,并且前0x10可在add时编辑,后0x10写上size和指向chunk的指针。之后会申请输入大小的chunk,此时如果输入大于0x400,将不会申请chunk,而且会将pre_chunk进行free(但此

2021-12-04 19:45:00 233

原创 [A]io

_IO_FILE_plusstruct _IO_FILE_plus{ FILE file; const struct _IO_jump_t *vtable;//存放各个函数的指针(表)}//定义:extern struct _IO_FILE_plus _IO_2_1_stdin_;vtablevoid * funcs[] = {1 NULL, // "extra word" 0开始2 NULL, // DUMMY3 exit, // finish4 NULL,

2021-12-04 19:45:00 165

原创 ycb2020babypwn(unsortedbin爆破stdout泄露)

题目没有leak函数,肯定得打stdout,但是又是个2.23,有指针没清零的漏洞在stdout-0x43的地方有0x7f的size,而且和main_arena+88很近,最后三位固定是0x5dd,所以需要爆破第二个字节的高位,概率是1/16。这应该是没leak的通用打法然后题目是通过double free,控制堆块,修改size进unsortedbin,然后爆破fd,申请出stdout泄露libc,最后打malloc_hook和realloc去getshell。操作首先肯定是double free

2021-12-04 15:37:28 380

原创 PRO(2.31largebin attack)

关于largebinpro版本给了修复chunk flag的函数,而且show和edit都只看flag,free还没清指针,可以各种UAF。但是,add中只能申请large chunk,这导致UAF不能进行任意地址申请,而且版本是libc2.31。所以我们能用的就只能是largebin attack了,首先利用原理是,在largebin的管理中,采用先进先出的原则(插队头,取队尾),而且会排序,队头大,到队尾依次变小,四个指针:fd是从队头一直指向队尾,队尾的fd指向main_arena;bk则

2021-12-04 15:34:15 2883

原创 Free(tcache向前合并chunk&&offbynull)

在add中,调用fgets(malloc_ptr,size+1,stdin),从stdin中读取size+1字节,但是最后一个字节会默认为,’\x00’,所以有一个off by null漏洞。申请chunk最大0xf0,而且在写入时,会将内容每0x8字节和一个key进行异或。在edit中,可以修改一次chunk的fd//只要看到size限制在0x100,0xf0周围,很大可能是off by null//比如,数组读入[0]~[size]就是溢出了一个,如果数组提前全部清零过,那么就会溢出00首先,

2021-12-04 15:33:41 2943

原创 2.29leak off by null&&orw

2.29版本下加了check,除了基本unlink检测还加上了判定presize和size相不相等的检测,这让之前的向前合并unlink夹chunk的思路变得不可行,所以要利用就得结合fastbin smallbin largebin的残留指针,去构造unlink。但这个题它可以直接leak堆上的残留指针,所以可以获取到heap地址,之后可以将heap指针(地址)p放在堆上构造fd = &p-0x18,bk = &p-0x10通过unlink检测 heap11_addr = heap_

2021-12-04 15:32:46 2930

原创 lonelywolf_exp(tcache double free)

题目只能申请一个chunk指针,但是可以重复申请chunk,而且存在uaf,不可溢出首先绕过tcache的check使用double free泄露堆地址(老版本是可以直接free的,但是新版本需要free后edit一下再free),然后通过uaf在tcache中存放好两个指针,一个用来修改size,一个用来free chunk,之后申请0x70chunk,和另一个chunk防止合并。接着通过第一根指针修改size>0x80,然后通过第二根指针free此chunk,使用double free将他fre

2021-08-04 19:27:35 174

原创 ciscn_2019_s_3(execve&&sigreturn)

本题是一个系统调用,存在栈溢出,要点有以下几点,以下为第一种解法,构造execve(’/bin/sh’,0,0)1.题目中,并未出现sub esp得字眼,所以本题中ebp一直与esp重合,即最后ret得时候,pop的其实是rbp处的地址,所以本题返回点并不在ret处,而在rbp处。2.本题没有‘/bin/sh’,所以只能自己输入到栈上,这时就需要泄漏栈的地址,在使用gdb调试后,可以看到在ret地址后面有存储一个栈地址(即可以泄漏),再在调用syswrite时,可以看到buf的地址,经过计算后,得出偏移

2021-08-04 19:25:49 236

原创 ciscn_2019_final_3(tcache)

漏洞本题中限制了chunk的申请大小,最大只能0x78,无法直接申请大于0x400的chunkfree后指针并没有清零,存在uaftcache中的chunk被拿出时,不会check size因为是2.27版本,所以tcache中可以直接进行double free(tcache dup)tcache,这个东西在2.23之后的版本中出现,释放的chunk会优先放到tcache中,而同一size的tache chunk最多只能7个,之后再释放此size的chunk,会放到fastbin或者unsorte

2021-08-04 19:25:03 306

原创 babyfengshui_33c3_2016

利用堆申请机制绕过溢出检查,关键点在edit中,后指针小于前指针则满足条件,但是如果将后指针挤到后面去,则可以溢出。from pwn import * from LibcSearcher import *context(os='linux',arch='i386',log_level='debug')ms = remote("node3.buuoj.cn",29869)#ms = process("./33c3")elf = ELF("./33c3")def add(size,name,l

2021-08-04 19:24:12 166

原创 ciscn_2019_es_2(栈劫持)

from pwn import * from LibcSearcher import *context(os='linux',arch='i386',log_level='debug')#ms = process("./ciscn_2019_es_2")ms = remote('node3.buuoj.cn',29173)elf = ELF('./ciscn_2019_es_2')lea_ret_addr = 0x080484b8system_plt = elf.plt['system']

2021-08-04 19:23:30 151

原创 baby_tcacahe

add时用了strcpy函数,他在copy完对应字符串size的大小之后,会在最后加上一个’\x00’,这就造成了off by null,可以用来修改preinuse位来向前unlink合并,接下来就开始利用这点泄露libc,首先,申请三个chunk,按地址序号为0 1 2 3,0 3 是大于0x408的unsortedchunk,3是防止top合并的chunk,2是tcachechunk,我们需要合并0 1 2,切片0,利用1泄露libc。首先要设计好大小,我们选择size0为0x4e0,size1为

2021-08-04 19:22:59 93

原创 [Black Watch 入群题]PWN(栈迁移到bss)

from pwn import * from LibcSearcher import *context(os='linux',arch='i386',log_level='debug')ms = remote('node3.buuoj.cn',25353)#ms = process("./spwn")elf = ELF('./spwn')bss_addr = 0x0804A300lea_ret = 0x08048408write_plt = elf.plt['write']write_

2021-08-04 19:20:10 766

原创 zctfnote2

首先,有符号整数和无符号整数对比时,统一化为无符号整数对比,所以本题中,输入size为0,则循环中变为-1,也就是无符号中最大的数,实现无限写进行溢出。然后,unlink中,决定大小的只有fakechunk的size和后面的某个chunk的presize,两个chunk中间的chunk都可以通过修改大小来覆盖掉。而且,无所谓合并后这个chunk去哪儿了,都会将list指针修改掉。最后是打的menu函数中的atoi,本来想打freegot,结果因为chunk不太够无法打。from pwn import

2021-08-04 19:19:40 129

原创 [A]oooorder(orw)

这题是2.27GNU7.3(没有doublefree的check)下的setcontext绕过沙箱进行orw,算是一个学习题,总体思路就是拿到freehook后用setcontext+53(用frame进行设置)运行mprotect,之后shellcode调用read 和 jmp跳到shellcode执行orw。下面跟着脚本进行讲解。漏洞点在realloc(ptr,size),如果size为0,他就会把这个chunk free掉。from pwn import *context(os='linux',

2021-08-04 19:19:04 159

原创 [A]onepunch(tcache stash&&seccomp)

程序调用的是calloc,这个函数不会从tcache中取chunk。所以直接add free 重复填满tcache,利用uaf泄露heap和libctcache per thread struct是来管理链表上堆块的数量的,大小一共是0x250,在heap开头。其中counts一共占0x40,每一个字节都代表一个大小范围正好对应64个entry,第一个字节代表0x10,类推。本题中数一数就是对应0x220的size的地方需要大于6,虽然我们可以申请7个0x220的chunk来让他变为7,可以通过if,但是

2021-08-04 19:18:47 221

原创 Pwn入门笔记(五)ROP

ROP32位的ROP64位的ROP32位的ROP这个在栈基础中提到过,此处写出是为了和64位的形成对比。通过在返回地址上写上函数PLT的地址来实现跳转到函数,调用函数时压入参数后会压入eip(返回地址),然后32位程序参数在栈上,所以结构如下图:栈底-高地址->cba实际调用函数中的返回地址eipdddd原返回地址(r)system的plt表地址原ebp (s)aaaaaaaaaaaaaaaaaaa…栈顶-低地址->…

2020-11-29 15:28:25 765 1

原创 Pwn入门笔记(四)canary初识

Leak CanaryCanary1 wp什么是canary呢,就是在程序进行输入前会生成一个随机数(每一次执行程序这个数都不一样),格式为“0x…00”,在ida中是这样的画圈的地方就是生成了canary值赋给v4,最后一行将v4和之前的值取异或,之后return将这个值返回。题目逻辑很简单,就是两次输入输出,很明显格式化字符串漏洞。然后还有个函数叫getshell,这就是我们要执行的system函数,思路就清晰了,先用格式化字符串漏洞打印canary的值,然后栈溢出获取shell。那么在栈上他

2020-11-26 17:34:13 1668 2

原创 Pwn入门笔记(三)函数细节

细节关于漏洞函数writeprintf关于p64(),u64(),int等转换函数题目中关于漏洞函数writewrite(参数1,参数2,参数3),write有三个参数,参数1是模式,“1”为写模式,参数2在栈上其实是一个地址,它会将这个地址上存的字符串给打印出来,参数3是打印字符串的长度。printf直接进行输出,“%p”,可以输出后面参数的地址“%20 $p”(无空格),打印出偏移为21得地方的地址“%20 $n”(无空格),写入%前字符串的长度到偏移为21得地方"%70d%20 $n

2020-11-25 14:48:50 2255

原创 Pwn入门笔记(二)a little栈基础知识

栈基础知识栈函数调用参数,返回,栈帧上的函数,栈溢出ROP参数返回栈帧上的函数栈溢出ROP后的函数参数寻址栈规则为先进后出的一片连续内存,栈底为内存高地址,栈顶为低地址。这里先说一个小知识,指针存的地址,32位程序中占4个字节,而在64位中占8个字节。在ida中栈结构为注意左边不是它的地址。输入值时从上到下进行填充,在底部,s为栈底指针,也就是bp。r是返回地址,这里会直接跳转到上面存的地址,也就是rop的原理。而当你要计算从b输入多少字节才能把a位置之前填充满,公式为 b-a = 填充值

2020-11-23 23:42:14 565 1

原创 Pwn入门笔记(一)基础编程函数

基础编程函数文件库和设置本地文件的调试和远程端口的连接发送和接收文件的加载类函数打/解包函数打包:解包shellcode正式开始学习pwn了,第一次写pwn脚本,在开始之前需要了解一些基础知识。写pwn脚本我们用python在linux环境下运行。文件库和设置安装pwntools库后,开头加上from pwn import *这是导入pwntools库的所有函数,也是一个pwn脚本的起点。context(os="liunx",arch="x86/amd64",log_level="debug"

2020-11-23 20:08:34 2099

原创 逆向入门笔记(一)

了解四种pwn栈溢出以及逆向分析writeup逆向静态:bugku-love逆向动态:bugku-游戏过关pwn 栈溢出:bugku-pwn2pwn Rop攻击:ret2winpwn Canary(金丝雀):攻防世界-hello pwnpwn 格式化字符串漏洞:攻防世界-CGfsb逆向静态:bugku-love下载文件,是一个exe可执行文件,ida看看先,找到main,双击main0先直接看最下面,如果Dest和Str2相等,则为flag,所以双击Str2,导出后再看Dest,第一个for循环中,

2020-11-23 19:16:12 373 2

原创 2020-10-05Python笔记-py下的线性方程组求解

py下的线性方程组求解安装nunmpy和pandas库函数使用例题writeup安装nunmpy和pandas库命令python -m pip install numpypython -m pip install pandas函数使用f = open(‘路径/’,‘r’)读入txt文件loc[a:b,c:d]取a->b行,c->d列data = pd.read.csv(“路径/”,header=None)读取csv表格x = np.linalg.solve(a,b)计

2020-10-05 12:56:04 192

原创 2020-9.14~9.28笔记

2020-9.14~9.28学习笔记汇编指令常见寄存器数据传送指令算术运算指令逻辑运算指令循环控制指令转移指令Python基本语法常见函数Linux虚拟机kali&ubuntu指令基础指令kali下的插件及使用指令ubuntu下的插件使用指令汇编指令常见寄存器寄存器名称用途EAX用于乘除法和函数返回值EBX内存数据指针,常以它为基址访问内存ECX字符串和循环的计数器EDX用于乘除法––ESI内存数据指针和源字符串指针EDI内

2020-09-19 13:39:42 179

原创 20年9月wust招新赛writeup

20年9月wust招新赛writeupCrypto黑铁2黑铁1青铜3青铜5白银5黄金3黄金2Misc黑铁3白银3铂金3黄金1铂金2Web青铜2青铜1白银3白银2大师1Reverse白银4青铜4黄金4铂金4钻石4Pwn铂金1钻石3钻石2钻石1Crypto黑铁2题目告诉了是大帝密码,所以用在线网站解密凯撒密码,key为3,得到flag{th3_m0st_e4sy_cae5ar}黑铁1很明显,栅栏密码,在线网站,key为5,得到flag{r4i1f3nce_1s_s0_e4sy}青铜3题目说了是维吉

2020-09-13 15:01:21 458

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除