侧信道爆破
侧信道攻击是一种非正常的攻击手段,是根据程序的反馈报错信息来参考的一种攻击方式 原理是讲 flag 文件中的字符读取到缓冲区,将文件中的字符一个字节一个字节的对比 使用前提: 1-输入的 shellcode 能够被执行 2-程序禁用了execve系统调用,和关闭了标准输出流才用必要进行使用,因为爆破所需要的时间较长 3-read、open、openat、readv、fread 都可以被使用,但是一定要确保可以打开文件并且 read 读取到 4-标准错误不能被关闭,我们需要更具系统的反馈信息进行循环判定 侧信道攻击其实是比较模板化的,基本可以套用以下公式 12345678910111213141516171819202122232425mov r12, 0x67616c66 ; 将字符串 "flag" 的 ASCII 值加载到寄存器 r12 中push r12 ; 将 r12 的值推送到栈上mov rdi, rsp ; 将栈上的地址赋给寄存器 rdixor esi, esi ; 将 es...
CTFshow PWN164
muea 中只有 add 和 delete add 中使用的是 realloc 什么是 realloc 呢? 可以参考如下文章 https://squarepants0.github.io/2020/11/18/2019-realloc-magic-realloc-yu-tcache/#toc-heading-2 简单来说就说 mallco 和 free 的结合 plus 版 1234567891011void *realloc(void *ptr, size_t size)# ptr=0 && size!=0# 视作mallco(size) 返回对应的地址# ptr!=0 && size==0# 视作free(ptr)#ptr!=0 && size!=0#当上一次mallco返回的ptr值的size > 现在需要申请的size,则会进行缩小,然后多余的进行free#当上一次mallco返回的ptr值的size < 现在需要申请的size,则会进行扩容#如果上一次mallco返回的ptr已经被free了,且 <...
CTFshow PWN162
此文章参考了: CTFshow PWN162 堆利用技巧大杂烩_ctfshow-pwn-162-CSDN博客 好好说话之IO_FILE利用(1):利用_IO_2_1_stdout泄露libc_libc泄露方式-CSDN博客 使用realloc函数来调整栈帧让one_gadget生效 - ZikH26 - 博客园 感谢师傅的讲解 本文章只描述了本地是操作是如何打通程序的,远程需要爆破出I0_2_1_stderr_ 的第四位 1/16 概率 本题使用了double_free,unsortedbin_attack 、_IO_2_1_stdout、house of spirit,UAF 经典的增删改查 add 后会有一个固定的 0x28 大小的 chunk,和一个自行输入 size 大小的 chunk,size 被限制大小,add 的 chunk 数量也被限制为 0x13,并且 s->data 为 inuse 此时的堆结构 show 是假函数,无法 show delete 函数中,if 检测 chunk_s+v1 实际上并不是inuse 的值,所以这边是一个假判...
CTFshow PWN160
libc 下载链接:https://files.buuoj.cn/files/85ee93d92fc553f78f195a133690eef3/libc-2.23.so 简单的增删改查 在 add 中,我们输入 size 创建的 chunk 为 s,固定生成的一个 chunk 为 v3 s 在 v3 内存的上方,后续将 s 的 data 段地址赋值给 v3data 段 将 v3 放入 chunk 管理数组 chunk_s 中 edit 函数中有验证 v3->s+v2 的值于 s 的 size 做比较,如果我们在 v3 和 s 之间添加 chunk 使其不连续即可绕过此检查 add 后的 chunk 如图所示 delete 函数中将 s 清空,未将 v3chunk 清空,存在 uaf,但是这题不用 uaf 也可以写 show 输出 s 和 v3 中的 nam 和 test edit 就是上面 add 中的修改 test 中使用的 目前我们的思路为: 使 s 和 v3 中有其他 chunk 存在,这样我们就可以绕过 edit 中的检测使其修改到别的 chunk 内...
[HNCTF 2022 WEEK4]ezheap
经典的增删改查 我们先看 add 函数 重要的是这几行,先创建一个 0x20 大小的堆块(实际是 0x30)放入heaplist 数组中,类似于管理堆块的数组 v0 是 chuank0 data 段的地址,v0+0x10 中放入新 chunk 的 data 段地址,v0+0x20 存入 puts 函数的真实地址 后续又往 chunk0 和 chunk1 中读入数据 堆块的大致情况入下图 delet 函数 free 后置零没有 uaf 漏洞 edit 函数 重点在这边,修改的 size 大小是我们输入进去的,所以我们可以申请两个 chunk,修改 第一个 chunk 的时候把第二个 chunk 的内容也修改掉。 show 函数 heaplist[v1] + 0x20 的地方就是 puts 函数,这边的本意就是调用 puts 函数输出heaplist[v1]->data 段内容,heaplist[v1] + 0x10->data 和第二个 chunk 中 data 段的内容 目前我们的思路就很清楚了,我们可以先申请两个堆块,然后通过 edit 函数修改第一个堆...
libc泄漏
泄露libc之有libc文件 给fresh pwner提醒下,这里的puts是可以换的(看你是通过puts函数泄露的还是通过write函数泄露的,通过哪个写哪个)仔细观察有无 libc 文件的区别(发现没中小括号也是要区分的哦,可以自己试试) 123libc_base = puts_addr - libc.sym['puts']sys_addr = libc_base + libc.sym['system']bin_sh = libc_base + next(libc.search(b"/bin/sh\x00")) 泄露libc之无libc文件 1234libc = LibcSearcher('puts',puts_addr)libc_base = puts_addr - libc.dump('puts')sys_addr = libc_base + libc.dump('system')bin_sh = libc_base + libc.dump(...
hgame_week1
misaki #00044e-WEEK1-WP1-签到1-TEST NC nc 链接即可 2-从这里开始的序章。 2-sieve ai直接跑出来 3-Hakuya Want A Girl Friend开头是压缩包pk格式,结尾是47 4e 50 89png图片格式 倒叙即可获取图片 png高度一把梭即可 4-counting petals 第一次输入不超过16,第二次循环数组输入可以输入到v7[17],超出合法范围,覆盖到v8,同时是%ld,同时覆盖了v8,v9,后续通过输出泄漏返回地址,canary 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869from pwn import * #引用pwntools库context(log_level='debug',arch='amd64',os='linux')min...
周报汇总
[2021 鹤城杯]littleoflibc+canary保护 做了很久终于弄懂了 使用ida打开后发现此处两个read都可以作为溢出点进行栈溢出,但是程序开启了canary保护,所以我们需要绕过canary保护进行栈溢出 v3为canary的值 大小为8个字节位 此时我们可以先编写第一段代码内容,用于获取泄漏的canary值 12345678910111213141516171819202122from pwn import * #引用pwntools库context(log_level='debug',arch='amd64')p=remote('node4.anna.nssctf.cn',28445)#配置nc连接:node4.anna.nssctf.cn:28445e=ELF('./littleof')put_got=e.got['puts']put_plt=e.plt['puts']ret=0x40059erdi=0x400863main_add=...
[NISACTF 2022]UAF
正常的增删改查功能 add 中创建一个堆放入 page 在数组之中的,v1 作为计数变量,每添加一个都自增 show 函数中输入 0 时会调用 (*((void (__cdecl **)(char *))page + 1))(page); 程序是 32 位使用 page+1 = page 地址+4 page[4]=函数名 page[0]=参数 此时就是需要修改 page[0]=sh\x00\x00+system 地址 使用sh\x00\x00 是因为只能存入 4 字节/bin/sh\x00 超出 4 字节 但是在 edit 函数中我们无法直接去修改 page[0] 中的值 del 函数中 free 未置 0 但是 v1 这个计数单位也未置 0 此时我们可以用到堆中的机制 先创建一个 chunk1,再释放掉 chunk1,此时在申请一个 chunk2 chunk2 使用的还是 chunk1 的地址,因为申请一个比较小的堆块时会在 fastbin 中先进行查找有没有对应 size 的堆块,如果有那就申请出来 所以我...
[BJDCTF 2020]YDSneedGirlfriend
经典的增删改查 add 函数中就很有看头了,先申请了一个固定 0x10 大小的 chunk,又在 chunk 的 data 段写入的 puts 函数地址,又在 chunk->data 段+0x8 后面写入了一个新 chunk,并且往新 chunk 的 data 段写入 her name free 函数中未置 0 存在 uaf show 函数中使用 chunk->data 作为函数调用输出chunk->data(我调用我自己输出我自己了属于是 程序有完整的后面函数 此时我们想法是在 show 中实现调用后面函数 此时我们如果申请两个 0x20(实际申请 0x30 大小的 chunk ,并且 free 掉后 在 fastbin 中 0x20:chunk1->chunk0、0x30:chunk1->chunk0 0x20 是 add 函数中在每一次调用时都会申请的一个 0x10 大小的 chunk 此时我们可以利用这一点 在 add 函数中申请一个 0x10 大小的 chunk,会把 fastbin 链表中两个 0x20 的 chunk 申请出...