Pwn
文章平均质量分 71
Red-Leaves
这个作者很懒,什么都没留下…
展开
-
深入理解 House of Cat
exit() --> __run_exit_handlers --> _IO_cleanup --> _IO_flush_all_lockp --> _IO_wfile_seekoff --> _IO_switch_to_wget_mode --> _IO_switch_to_wget_mode 的 call rax。当RCX为0时,程序进入了这段 if 语句。_wide_data 指向的 _IO_FILE 结构体的 _IO_write_ptr 必须大于 _IO_write_base,mode 大于0。原创 2024-05-16 13:00:36 · 791 阅读 · 0 评论 -
Pwn Unlink堆攻击技术原理以及例题
现在有这么三个chunk,其中我们已经构造好了Unlink的Payload。乍一看可能有点一头雾水,那么如果我们把这段看成一个chunk结构体呢?反之,另一个也是这个道理。glibc 2.23中的unlink宏源码是这样的。,这段恰好满足我们的unlink需求。,也就是我们的fake_chunk。,我们直接查看这个fd指向了哪里。,P是fake_chunk,也就是。这题的堆块指针位于bss段内,是。P是fake_chunk,即可获得我们的fd和bk。complete,或者说。指向的都是同一个地方。原创 2023-12-17 13:13:35 · 1011 阅读 · 0 评论 -
CISCN SilverWolf
我们将 __free_hook 劫持到 setcontext + 53 以获取需要的函数片段。在这一步之后,我们的 free 将执行 setcontext。二:通过将 free 劫持到 setcontext,RDI 保持其本应执行的操作。之后我们释放堆,由于我们修改目前已存在7个Tcache堆块,我们的堆块会被放入Unsorted Bin中。在这之后,我们可以在需要时调用我们的open函数。记得要恢复这部分,因为我们需要使用Tcache来进行后续的攻击。的地方申请堆块,我们就成功劫持到了这个结构体。原创 2023-12-13 20:08:23 · 1083 阅读 · 0 评论 -
浅入研究 tcache_perthread_struct
tcache_pertherad_struct结构体初探原创 2023-12-13 18:28:40 · 1010 阅读 · 2 评论 -
在Pwn中,为什么时长需要栈对齐?
在 Pwn 的学习中,对于初学者常常会遇到这个问题:找到了溢出点,并且知道如何溢出,但是不知道为什么自己的Payload并没有成功,Pwntools报错EOF:今天趁着有时间,来仔细研究一下为什么会发生这种情况。原创 2023-12-07 20:00:30 · 990 阅读 · 0 评论 -
[HNCTF 2022 WEEK4]ezheap
手把手教学,覆盖一切途中会遇到的问题。原创 2023-04-26 20:15:21 · 1030 阅读 · 3 评论 -
HDCTF KEEP ON
我们将Payload填充到0x50大小,因为0x50是s的大小。剩下的0x10则是我们的RBP与Leave, Return指令。然后就是我们的/bin/sh地址。rbp与s的距离为0x60,再减去0x08的返回地址,就得到了我们的目标迁移地址。我们首先将binsh的地址送入rdi寄存器中,然后再继续接下来的操作。这样我们就得到了我们的目标地址,可以开始构建我们的Payload了。来将/bin/sh的地址pop进栈中作为system函数的参数。我们只有0x60的大小构建Payload。原创 2023-04-26 19:57:58 · 657 阅读 · 1 评论 -
HDCTF 2023 Pwn WriteUp
本人是菜狗,比赛的时候只做出来1题,2题有思路但是不会,还是太菜了。栈迁移还是不会,但又都是栈迁移的题,真头大。得找时间好好学学。原创 2023-04-23 13:15:15 · 774 阅读 · 0 评论 -
[2021 东华杯]bg3
2021 东华杯]bg3本题是C++写的一道经典菜单堆题,拥有增删改查全部功能。本题本地和远程需要两套Libc和两套偏移。远程的Libc版本是,本地的Libc版本是。原创 2023-04-17 20:30:09 · 420 阅读 · 0 评论 -
[长安杯 2021学生组]baigei
本题是一题经典的堆题,拥有增删改查功能。在线题目可以在NSSCTF中找到。原创 2023-04-12 12:33:30 · 609 阅读 · 0 评论 -
[BUUCTF] babyheap_0ctf_2017
有点回想起当初第一次拿到flag时的感觉,继续加油。本题考察知识点:**Fastbin Attack** 与 **Unsorted Bin Attack。**通过使用Fastbin Attack与堆溢出漏洞,我们可以绕过Free后指针置零,从而达到在置零指针后获取堆块fd指针。通过Unsorted Bin Attack,我们可以泄露Libc地址。然后我们再使用Fastbin Attack替换__malloc_hook本文写给自己,也写给跟我一样全网寻找详细解答的师傅们。原创 2023-03-28 10:37:18 · 735 阅读 · 0 评论 -
SROP学习 smallest & ciscn_s_3
SROP学习,例题 smallest ,ciscn_s_3原创 2023-03-19 18:49:39 · 441 阅读 · 0 评论 -
Ciscn_2021_lonelywolf
在第一步中我们得到了tcache_struct的起始地址,我们只需要+0x10即可得到tcache_struct的数据段地址,因为tcache_struct本身也是一个堆。这里有一点需要注意,本题的libc是新版的2.27,具有检测Double Free的机制。机制是在tcache堆中的bk上存储了一段数据,称为key,如果检测到了key,即检测到Double Free。可以发现系统从0x55dc90f61000开辟了0x80,成了我们申请的堆块,变成了0x55dc90f61080,并且状态也改变了。原创 2023-03-18 17:22:48 · 177 阅读 · 0 评论 -
NSSCTF Pwn Page 1 - 2
NSSCTF Pwn 第一页到第二页全部题目解析。刷了大概一个月的NSSCTF,对Pwn的理解更高了,虽然也没高到哪去。原创 2023-03-14 18:28:16 · 1565 阅读 · 0 评论 -
[NISACTF 2022]UAF
跟hacknote一样的做法,但是有所不同。原创 2023-03-10 10:01:24 · 434 阅读 · 1 评论 -
Hacknote 一道简单的UAF漏洞题
看了大佬们的WP两天,勉强搞懂了原理。如有任何错误请在评论区指出。原创 2023-03-09 15:59:09 · 331 阅读 · 0 评论 -
NSSCTF 刷题记录
本篇文章主要写几个值得记一笔的题目,其他题目都是类似换皮。原创 2023-03-07 19:56:23 · 900 阅读 · 3 评论 -
[HGAME 2022 week1]test your gdb
word函数中,s2被加密,然后使用memcmp函数进行 buf 与 s2 的对比。main函数,个人理解是通过 pthread_create 函数创建并调用一个线程,创建的线程同等于 read(0,buf,0x28)。注意:一定不能使用sendline(v2),因为sendline会添加换行符,因此进入程序的下一个函数,而不是readfsqword。我们发送了16个字节的v2,也就是0x10大小的v2,我们还需要接收0x18大小的垃圾数据,之后的0x08才是我们的Canary。,也就是s2的内容。原创 2023-03-06 14:15:47 · 347 阅读 · 3 评论 -
NSSCTF [2021 鹤城杯]littleof
很显然栈溢出漏洞位于read函数中,buf大小为0x50,而read函数的第三参数,也就是输出/写入/输出的最大的字节长度为0x100,就是2个buf大小的数据。开启 Canary : RBP 位于 0x50 + 0x08,Canary位于0x50 - 0x08,Return Address位于0x50 + 0x16。因为Canary是栈中的一个随机值,我们通过printf泄露Canary,然后将其填充至它本来应该在的位置,就能通过检查。原创 2023-03-02 23:43:10 · 619 阅读 · 1 评论 -
记一个 DynELF 的使用例子
DynELF不能直接泄露/bin/sh的地址,因此需要使用read函数手动输入。实际上操作DynELF比较麻烦,也容易报错,可能是我自己的问题。但是相比之下DynELF的优势是快,并且用起来简单。无论如何也是一种做题的方法,记一笔。并且需要联网,不能比赛使用。原创 2023-02-28 15:52:50 · 117 阅读 · 0 评论 -
BUUCTF Pwn 1-12题解析及答案
这里使用fmtstr_payload直接替换 atoi_got 的原因是got表才是程序运行时函数的真正地址,通过替换atoi,修改为system,再送入'/bin/sh\x00' 即可成功getshell。s 的大小是0x3C,那么我们只需要输入 0x3C,也就是60 / 3 个I即可溢出,之后的内容我们可以就可以构建ROP链。也就是说,我们最多输入32个字节的东西,根据上文,我们可以输入32个I,这样就是32个you,也就是96个字节。0x0F + 0x08 代表 s 的大小加上8字节大小的rbp。原创 2023-02-28 14:22:07 · 1297 阅读 · 0 评论 -
BUUCTF Ret2Csu ciscn_s_3
经过几个月的假期都忘完了,趁着最近有点时间复健一下,顺便弄明白了不少以前还不会的东西。原创 2023-02-20 20:24:59 · 363 阅读 · 0 评论 -
Ret2csu level5 & ciscn_2019_s_3
本题难点:对栈的理解需要稍微更深入一点。原创 2022-11-06 12:06:40 · 398 阅读 · 0 评论 -
BUUCTF ciscn_2019_es_2
栈迁移。原创 2022-11-02 12:52:35 · 241 阅读 · 0 评论 -
BUUCTF pwn2_sctf2016
本题难点:绕过字符串大小限制以及是否掌握了ret2libc。原创 2022-11-01 09:16:50 · 469 阅读 · 0 评论 -
BUUCTF ciscn_2019_ne_5 & jarvisoj_fm
只开起了部分RELRO与NX。IDA中发现4个函数mainGetFlagAddLog主要只需要看这3个函数。原创 2022-11-01 01:28:11 · 676 阅读 · 0 评论 -
BUUCTF ciscn_2019_n_5
通过 puts 函数泄露真实地址,通过LibcSearcher查询Libc中后3位相同的Libc,dump并计算出 system 、 /bin/sh 的偏移。但是有个问题,如果本地打不进去可以尝试更换系统打,我的Kali打不进去换了个Ubuntu进去了。既然没开NX,那代表栈是可执行的,只需要构造shellcode即可直接获取shell。Payload_Name --- 用来跳过第一步的输入 name。Payload_Leak --- 用来进行溢出并获取地址。完全是裸的程序,基本上一点保护都没开。原创 2022-10-31 17:52:55 · 1417 阅读 · 4 评论 -
BUUCTF not_the_same_3dsctf_2016
本题目本地与远程得用两种方案打。原创 2022-10-31 13:19:39 · 180 阅读 · 0 评论 -
BUUCTF ciscn_2019_n_8
一道通过Checksec让没看源代码的你觉得难度很高的题。原创 2022-10-31 12:15:58 · 242 阅读 · 0 评论 -
BUUCTF [第五空间2019 决赛]PWN5
输入探测格式化字符串的payload,AAAA-%x-%x-%x-%x-%x,A的ASCII码值为65(0x41),因此是图中选中的段。通过 fmtstr_payload 将 dword_804C044 的内容替换为0x1,而非随机数。因为我们已经知道偏移量了,可以使用pwntools的 fmtstr_payload 函数。但是这次是将 dword_804C044 修改为任意值,然后再次输入此值即可获取shell。或者还有一个,AAAA-%p-%p-%p-%p-%p-%p,32位64位通用。原创 2022-10-31 11:11:05 · 1352 阅读 · 0 评论 -
BUUCTF [OGeek2019]babyrop
不知道为什么远程进不去,后来选择了不用LibcSearcher,用题目提供的Libc进去了。分析完反汇编成C语言的程序源码后,就是常规的ret2libc了。由于本题是32位ELF,因此不需要rdi与ret栈对齐。思路有了,接下来是构造PoC与Payload。strlen 遇到 \x00会截断。使用puts函数进行泄露真实地址。成功本地获取shell。首先绕过 strlen。原创 2022-10-30 22:32:42 · 616 阅读 · 0 评论 -
BUUCTF ciscn_2019_c_1
RELRO 是一种用于加强对 Binary 数据段的保护的技术。由 CPU 提供支持,在页表中有Non-executable flag, 来限制一块内存区域不可执行。IDA Pro中查看的大小有时候可能是错误的,大部分时间以gdb动态调试为准。把加密后的文本复制到新建文本文档中,查询RBP的前4个字符。远程调试使用 libc 0 ,本地调试使用 libc 1。64位ELF,开启了部分RELRO以及NX。32位和64位程序在函数调用的方式存在区别。不止这种方法可以获取大小,还有两种方法。84 - 4 即可。原创 2022-10-30 17:46:59 · 737 阅读 · 0 评论 -
BUUCTF get_started_3dsctf_2016
最后必须要返回exit,因为本题没有开启标准输入输出,输入输出会在缓冲区呆着,而exit执行后会将缓冲区输出,则可回显flag。需要 -0x04,因为是32位程序,并且返回地址要改成 get_flag 的地址。溢出 + get_flag地址 + exit + 2个判断条件。溢出 + get_flag地址 + 2个判断条件。但是这个思路还缺少一步。key,key1的地址。原创 2022-10-29 15:33:00 · 386 阅读 · 0 评论 -
XSCTF联合招新赛(热身赛)babystack & easyrop
开启了栈不可执行,但是在 IDA Pro 中发现了backdoor函数。原创 2022-10-29 14:46:13 · 1597 阅读 · 0 评论 -
BUUCTF ciscn_2019_en_2
对输入的字符串进行了加密,但是不知道为什么不需要绕过就能成功。使用gdb调试会被加密,因此使用IDA Pro查看变量大小。因为题目部署在Ubuntu18,因此需要栈平衡。原创 2022-10-28 20:05:05 · 503 阅读 · 0 评论 -
BUUCTF jarvisoj_level3_x64 & jarvisoj_level4
64位ELF 开启了NX,其余全部关闭。IDA Pro 静态调试除了改成了64位似乎都没什么区别,gdb动态调试。原创 2022-10-28 08:47:54 · 406 阅读 · 1 评论 -
初级 Pwn Ret2Libc 较万用PoC
自己写的一个比较通用的PoC,用作备忘。建议先看看为什么要这么写再使用。原创 2022-10-28 00:11:00 · 197 阅读 · 0 评论 -
BUUCTF [HarekazeCTF2019]baby_rop2
IDA Pro 静态调试。依旧可以使用上次的PoC。原创 2022-10-28 00:04:14 · 361 阅读 · 0 评论 -
BUUCTF 铁人三项(第五赛区)_2018_rop
完全可以使用同一个脚本,只需要进行略微修改。比如修改IP 端口 以及查找Libc的模块。原创 2022-10-27 23:44:24 · 94 阅读 · 0 评论 -
BUUCTF jarvisoj_level3
切入点从泄露write函数入手。栈溢出漏洞,ret2libc。IDA Pro 静态调试。原创 2022-10-27 22:58:27 · 315 阅读 · 3 评论