- 博客(92)
- 收藏
- 关注
原创 wdb2018 guess WP
整体没有能直接打印地址的地方,这里要利用argv[0]和canary的错误打印函数来打印所需的东西。3.找到flag和该栈地址的偏移并覆盖argv[0]为flag地址,打印flag。会把flag读取到栈上,然后创建子进程来gets输入,最多能输入三次。,往后的版本修改后会直接打印unknown,无法泄露了)1.利用got表覆盖到argv[0]泄露出来libc地址。0xde10和0xdf38的偏移:0x128。利用它来泄露栈地址从而得到flag的偏移位置。argv[0]储存的是程序名,在触发。
2025-08-01 16:55:29
253
原创 NepCTF2025 Pwn方向
checksec:64位开启了全保护,用IDA64打开看看:这个函数会让输入名字,并且列出文件目录会检查文件名是否为flag 接下来会创建一个叫start_routine的子线程可以看到会打印文件名的md5值,并且读取文件,打印名字,这里存在一个格式字符串漏洞同时因为创建线程和检查存在时间差,可以利用条件竞争漏洞来覆盖原来的文件名读取flag又因为读取文件前会打印文件名的md5值,可以根据这个判断是否覆盖成功经过测试可以知道格式字符串打印文件内容的偏移为22~27(记得用%p来试!%x打印不全,%s是打印
2025-07-30 10:50:54
505
原创 轩辕杯 pwn ez_ptm WP
把rdx移动到heap_addr + 0xe0 + 0xe8 - 0x68位置,从而让rsp到heap_addr + 0xe0 + 0xe0 + 0x18(最后把IO_list_all利用large binattack移动到伪造好的file并且利用exit刷新IO流就能打印出flag。接下来是将wide_data表和进行context操作的重叠了,setcontext位于doallocate的位置便于执行,正常的利用_IO_wide_data和_IO_wfile_jumps 虚函数表伪造的流程。
2025-07-25 16:46:01
326
原创 轩辕杯2025 Pwn baby_heap WP(house_of_apple2)
再把Fake_wide_vtable对应的堆填满直到相邻堆的size位,将其修改为' sh'(对应fake_file的flag位),这也是为什么chunk2要设置成0x458,是为了将下一个chunk的size位修改了。Fake_Fake_IO_wide_data:伪造的_IO_wide_data,在偏移0xe0位写入Fake_wide_vtable所在地址。_IO_wide_data:指向Fake_Fake_IO_wide_data的地址(伪造的),这里需要用调试得出。_IO_buf_base置为0。
2025-07-22 11:25:36
386
原创 记一道关于SROP的题
所以需要利用一下read函数,read函数的返回值为字符个数,可以利用返回数字的15来进行SROP。注意末尾传递binsh的时候也要填充为15个字节以执行第二个sigreturn。之后就利用SigreturnFrame来构造SROP。函数也比较干净,要系统调用也没有现成的数字用。首先把栈移动到bss段上read来将数据存入。然后存入下一个read来写入execve。可以利用这一块的read来读取。IDA64打开:整理函数。保护都没开,栈可执行。
2025-07-22 09:03:17
189
原创 CTFSHOW pwn94 WP(手工地址写)
print一下system函数的plt,可以知道地址为0x08048400,以及调试测得偏移为6。之前已经写了个利用fmtstr_payload打法pwn94的exp,这次尝试用手写的方式打通。0x0804的10进制为2052,如果要写入的话就要:%2052c%x$hn。知道了%c还会累计前面的字符。
2025-07-21 14:47:38
197
原创 CTFSHOW pwn171 WP
chunk8的大小是0x20,在经历了第二次off-by-null后chunk7,8,9合并为1个unsorted bin chunk,可以看到system函数的位置是system+32,我手动给system地址-0x20的偏移才能真正的get shell。写入free_hook-8 是为了构造伪chunk,让system覆盖free_hook的同时也能释放它得到binsh。这是2.27版的glibc,它有tcache,所以泄露时要注意tcache链,其他的地方基本一致。也将指针清零0,正常delete。
2025-07-19 14:27:46
287
原创 CTFSHOW pwn176 WP(house_of_orange)
将bk设置为IO_list_all-0x10,size设置为0x60,这样的话再申请一个0x60的堆(这个堆所在位置是下一个IO_FILE结构体位置)出来时就可以触发IO_FILE了。接下来再申请一个0xF0的chunk 使得unsorted bin的fd,bk刚好在chunk1的data区里 然后打印chunk1的内容,就能算出libc。再free掉chunk2,因为系统认为前面有已释放的chunk,触发前向合并,会将chunk0,1,2合并为一个大的unsorted bin里的chunk。
2025-07-18 16:49:28
698
原创 CTFSHOW pwn166 WP
因为没有将指针置0,思路是先用unsorted bin attack泄露libc基址,再用malloc+realloc hook onegadget打。创建了两个堆,一个是0x18的索引堆,另一个是内容堆,其中索引堆的前8字节指向内容堆,中间8字节存放大小,最后8字节存放idx。没有将指针置0 存在double free漏洞 还有个假装成功/失败的随机puts。这里用double free构造malloc_hook的伪chunk。这个题没有给edit函数。
2025-07-15 10:21:57
178
原创 CTFSHOW pwn163 WP
利用堆溢出将chunk1的size改为chunk1+chunk2的大小,再释放chunk1,接着申请和chunk1相同的大小,这样就能让chunk2的fd,bk显示出main_arena了。因为存在堆溢出漏洞,所以思路是先利用unsorted bin attack泄露libc,再利用malloc_hook执行one_gadget。按照malloc_hook创建fake chunk的流程来。calloc函数申请堆,申请的大小<=0x1000。保护全开 64位 IDA64打开。将指针置0了,正常的free。
2025-07-14 16:18:01
306
原创 CTFSHOW pwn161 WP
使用calloc进行申请堆,并且堆大小限制在0x1000以内 用了两个全局变量分别存储是否使用(inuse)和大小(size) qword_202048是位于bss段上的堆指针。通过off-by-one修改chunk的size位为能包含下一个chunk,然后free掉修改的堆再申请原大小,这样就能利用show打印出来堆地址了。泄露出libc后就是使用malloc_hook了,但是这题one_gadget的条件不能直接满足,所以要用realloc_hook调整栈帧。正常的free并且清零了堆。
2025-07-13 21:02:55
247
原创 非栈上格式化字符串漏洞(BSS段上)
3.关于泄露rbp+8地址的选择,只要能得出固定偏移即可,在这题中,使用fmt偏移为8的栈地址同样能打通,只是离rbp+8的距离会改为0x150。1.在动态调试的时候,出现了没有16字节对齐的情况,这个时候需要按照栈对齐的方法,把后门函数地址+1来保证栈对齐。2.再利用fmt找到一个带有指向链条的栈地址并且得出这些地址的fmt偏移(addr1->addr2)这样,就能让RBP+8(返回地址)的位置指向了后门函数,从而get shell。这里使用fmt偏移为10的栈地址,和rbp+8的地址距离为0x38。
2025-07-11 17:17:26
344
原创 BaseCTF2024 shellcode_level1 WP
注意shellcode前的两个0x90是为了覆盖第一次写入的syscall。所以想到使用syscall:查看syscall占的字节数 刚好是2字节。在读取完两字节后还会把读取的字节进行一次call。只读取了两字节来shellcode。64位 开启了全保护。
2025-07-10 08:53:29
155
原创 CTFSHOW pwn160 WP
利用堆溢出先打印出free的got表,再计算libc基址得到system地址 最后将有free got表的堆改为system 并释放有binsh的堆 就能得到flag。这段的检查意图是:输入字符数需 小于等于 申请的第一个堆的data位置到第二个chunk的presize位前。13-16行指出,第二个堆的前4字节存第一个字节的堆指针 剩下的0x7C字节存name。思路是先让两个堆之间有堆溢出的间隔,然后对之间的堆进行修改,得到flag。申请了两个堆,其中第一个是输入的大小,第二个是0x80的大小。
2025-07-08 11:39:02
302
原创 CTFSHOW pwn143 WP
存在后门函数 且main函数的退出前会执行v4[1]位置的函数 该位置目前为goodbye_message函数。最后申请一个大小为-(0x60 + 0x8)的堆(v4[0]往后挪:v4[1])因为有着堆溢出且溢出长度没有限制 考虑house of force做法。可以看到 第一个堆(变量v4)距离 top chunk 0x60。先动态调试 找到该位置和top chunk的偏移。接下来将topchunk的size位修改为大数。可以修改堆的长度 存在堆溢出。
2025-06-10 22:32:05
239
原创 CTFSHOW Pwn94 WP
存在system函数 用格式字符串漏洞 fmtstr_payload工具 劫持printf GOT为system PLT函数。可以进行多次的printf。32位 保护只开了NX。
2025-05-30 11:08:52
217
原创 CTFSHOW pwn118 WP
思路是利用格式化字符串漏洞劫持__stack_chk_fail,将其改为后门函数 这样在触发stack smashing的时候就会执行后门函数。32位 开了canary。只进行了一次printf。
2025-05-28 11:48:12
150
原创 BUUCTF Pwn hitcontraining_uaf WP
此时malloc(8),会将该两个堆都申请出来 在malloc时能修改内容,将第一次申请的chunk的打印函数区域修改为目标函数。想法是创建两个大小相同的堆,然后free掉,这时两个具有打印函数的堆会在同一fastbin链表上;先创建了一个堆用于指向打印函数和内容区域,再创建输入大小的堆。此时执行打印第一次申请的chunk 就能得到shell。delnote 没有清空指针 存在UAF。
2025-05-12 20:46:14
162
原创 BUUCTF Pwn [ZJCTF 2019]Login WP
password_checker函数将var18的值赋给了rax。在password_checker函数会执行变量a1的内容。对应汇编为call rax 其中rax给var68赋值了。进行密码的检查 密码为2jctf_pa5sw0rd。将s填充到这个位置就能执行flag了。var18离变量s为0x48距离。
2025-05-06 16:33:29
187
原创 BUUCTF Pwn wustctf2020_closed WP
需要进行重定向 输入exec 1>&0 即可。关闭了标准输入和输出后再执行binsh。
2025-05-04 10:56:11
159
原创 BUUCTF Pwn cmcc_simplerop WP
因为是静态链接 无法用ret2libc 同时函数里没找到system函数 考虑用ret2syscall。IDA32打开 找到main函数 看到一堆函数 判断为静态链接。0x58 - 0x3c + 4 = 32 真实偏移应是32。32位 开了NX 无PIE和canary。
2025-03-28 14:50:28
231
原创 BUUCTF Pwn lctf2016_pwn200 WP
最后释放使其进入fastbin 再malloc并编辑 让shellcode的地址覆盖返回地址 最后退出程序的时候就会返回shellcode的地址。再往上就是第二次输入的位置(0x7ffee75a2730)(距离该rbp的位置0xC0)标记的位置是泄露出来的rbp(栈地址) 往上的0x616161...是用于填充的a。能利用printf泄露栈地址 而且能利用栈溢出覆盖堆指针 也能创建和删除堆。该函数会先创建一个0x40的堆 然后读取0x40的数据 并复制到dest。堆的增删功能 同时新建堆能控制大小。
2025-03-27 18:18:03
332
原创 BUUCTF Pwn babyheap_0ctf_2017 Unsorted bin attack部分
可以在编辑堆的时候重新设置大小 存在堆溢出。delete函数的指针清零了 无UAF。开启了全保护 64位。
2025-03-18 22:03:50
225
原创 NSSCTF Pwn [GHCTF 2025]真会布置栈吗?WP
思路是先泄露栈地址的位置 再利用各寄存器的读取写入binsh地址 0 0 最后利用rax和r13的交换执行execve(rax=59)syscall。先print三次 再read一次 其中第二次的print会打印RSP所在地址(栈地址泄露) read会将读取的内容存储在RSP。但是0x401017的gadgets里没有rdx的存储 需要用到0x401021的rdx清零。最后再jmp到 [RSP+8-8](也就是RSP)的位置执行。text段有存入各寄存器的指令。64位 IDA64打开。
2025-03-14 12:11:50
427
原创 BUUCTF Pwn [ZJCTF 2019]EasyHeap unlink+freehook做法
后续修改0x6020E0的位置为freehook 再修改一次 让其指向system 最后free掉chunk2 就能执行binsh了。delete_heap函数已经将指针清零 无UAF。edit_heap允许自己输入读取字节 存在堆溢出。同时 存储的指针位于bss段。
2025-03-13 22:29:08
302
原创 BUUCTF Pwn bjdctf_2020_router WP
注意到33行会执行system 15行已经有了ping 会将输入的内容变为ping xxx。这样就能得到flag。
2025-03-11 13:21:02
183
原创 BUUCTF Pwn mrctf2020_shellcode WP
按理说构不成溢出 但是下面的汇编:跳跃到11D6 将buf的内容存到rax 并进行call。进行一次puts操作 再进行一次读取0x400字节的read 存到buf。先创建了buf(大小0x410) var4(大小0x4) 两个变量。没开NX 开了PIE。
2025-03-11 13:09:32
208
原创 NSSCTF Pwn [BJDCTF 2020]YDSneedGirlfriend WP
add函数 会先创建一个0x10堆用于存储print堆内容的指针 再创建设定大小的堆。打印函数执行了0x10的堆的函数指针 可以利用delete的悬垂指针修改这段区域。先申请两个大于0x10的堆来让两个存放打印函数的堆能在free之后相邻。delete函数味清空指针 存在UAF/double free。此时执行show(0) 将会执行后门函数 得到shell。下载 checksec exeinfo。64位 打开IDA64查看。一个菜单题 查看各函数。
2025-03-10 16:24:28
195
原创 NSSCTF Pwn [SUCTF 2018 招新赛]unlink WP
接下来利用该区域泄露libc从而得到free_hook地址 来getshell。编辑函数存在堆溢出 同时buf是全局变量 位于bss段。那么就能利用unlink来让指针指向buf所在地址区域。64位 IDA64查看函数。堆题 增删查改都齐全。
2025-03-08 13:52:06
204
原创 BUUCTF Pwn ez_pz_hackover_2016 WP
可以看到 输入字符‘c’的位置应该在0x22 ebp在0x38 0x38-0x22=0x16 再加4字节到返回地址。首先会泄露变量s的地址(栈地址) 然后会对输入进行判断 存在crashme就将输入复制到dest变量。泄露的栈地址和shellcode的地址有0x20的偏移 再加个4位的地址。存在栈溢出 对于strcmp的比较 可以用 \x00 截断。下载 checksec exeinfo。但是dest的偏移不是IDA所写的。32位 IDA32打开 查看函数。
2025-03-03 16:52:19
233
原创 NSSCTF Pwn [NISACTF 2022]UAF WP
同时edit 不能编辑第0个堆 但del函数能删除第0个 所以需要先create第0个堆再删除再创建 这样就会让第一个堆的指针指向第0个 从而能编辑第0个堆的内容了。show函数中 如果页面是0就执行一个函数指针 create函数创建一个8字节的堆 这个函数指针的函数名在堆的后四个字节 函数参数是前四个字节。看到有后门函数 于是编辑的内容:前四个字节 'sh\x00\x00' 后四个字节为NICO函数地址。下载 exeinfo checksec。32位 IDA32 查看main。一个堆的增删查改功能。
2025-03-03 14:55:33
271
原创 NSSCTF Pwn [LitCTF 2023]狠狠的溢出涅~ WP
看到有strlen的长度检查 所以通过在payload开头加 \x00 跳过。现在 exeinfo checksec。64位 IDA64打开。
2025-03-01 09:42:29
156
原创 NSSCTF Pwn [CISCN 2023 初赛]烧烤摊儿 WP
同时该程序没有system函数 为静态链接 所以使用ret2syscall。经过测试可以知道 啤酒和烤串存在整数溢出 填负数就可以加钱。同时显示的名字是全局变量name 可以写入binsh。下载 checksec exeinfo。
2025-02-25 10:27:22
185
原创 BUUCTF Pwn metasequoia_2020_samsara WP
那么就可以把v7设置为chunk头 v9为该chunk的size。可以看到41行的free操作后没有把指针置为NULL。62行如果v8等于某个数值 那么就能得到flag。1.下载 checksec exeinfo。同时上面的v7是能打印出来的地址。可以进行double free。v7又正好在v8上8个字节。
2025-02-24 10:34:07
212
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人