- 博客(50)
- 收藏
- 关注
原创 [Litctf 2024] Pwn WP 全部题目
劫持 __malloc_hook 打 one_gadget。使用 realloc 调整栈帧。
2024-06-03 20:28:40
1396
原创 深入理解 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
1368
1
原创 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
1248
原创 CISCN SilverWolf
我们将 __free_hook 劫持到 setcontext + 53 以获取需要的函数片段。在这一步之后,我们的 free 将执行 setcontext。二:通过将 free 劫持到 setcontext,RDI 保持其本应执行的操作。之后我们释放堆,由于我们修改目前已存在7个Tcache堆块,我们的堆块会被放入Unsorted Bin中。在这之后,我们可以在需要时调用我们的open函数。记得要恢复这部分,因为我们需要使用Tcache来进行后续的攻击。的地方申请堆块,我们就成功劫持到了这个结构体。
2023-12-13 20:08:23
1207
原创 在Pwn中,为什么时长需要栈对齐?
在 Pwn 的学习中,对于初学者常常会遇到这个问题:找到了溢出点,并且知道如何溢出,但是不知道为什么自己的Payload并没有成功,Pwntools报错EOF:今天趁着有时间,来仔细研究一下为什么会发生这种情况。
2023-12-07 20:00:30
1799
原创 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
923
1
原创 HDCTF 2023 Pwn WriteUp
本人是菜狗,比赛的时候只做出来1题,2题有思路但是不会,还是太菜了。栈迁移还是不会,但又都是栈迁移的题,真头大。得找时间好好学学。
2023-04-23 13:15:15
1238
原创 [2021 东华杯]bg3
2021 东华杯]bg3本题是C++写的一道经典菜单堆题,拥有增删改查全部功能。本题本地和远程需要两套Libc和两套偏移。远程的Libc版本是,本地的Libc版本是。
2023-04-17 20:30:09
502
原创 [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
1262
原创 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
260
原创 2023年“楚怡杯“湖南省职业院校技能竞赛“网络安全”竞赛 B模块 Windows渗透与Linux提权
目录B-1:Windows操作系统渗透测试1. 通过本地PC中渗透测试平台Kali对服务器场景Windows进行系统服务及版本扫描渗透测试,并将该操作显示结果中Telnet服务对应的端口号作为FLAG提交2. 通过本地PC中渗透测试平台Kali对服务器场景Windows进行渗透测试,使用kali中hydra对服务器Telnet服务进行暴力破解(用户名为teltest),将hydra使用的必要参数当做FLAG进行提交(例:nmap -s -p 22);(字典路径/usr/share/wordlists/dir
2023-03-15 12:19:29
2875
10
原创 NSSCTF Pwn Page 1 - 2
NSSCTF Pwn 第一页到第二页全部题目解析。刷了大概一个月的NSSCTF,对Pwn的理解更高了,虽然也没高到哪去。
2023-03-14 18:28:16
4028
原创 2022年浙江省中职组网络空间安全省赛 逆向分析及隐写
从靶机服务器的FTP上下载PE01文件,对PE01.exe二进制文件进行静态调试,将main函数的入口地址作为Flag值提交;从靶机服务器的FTP上下载PE01文件,对PE01.exe二进制文件进行静态调试,将main函数的入口地址作为Flag值提交。对PE01.exe二进制文件进行静态调试,尝试破解该二进制文件,将注册成功后的回显信息作为Flag值提交;对PE01.exe二进制文件进行静态调试,尝试破解该二进制文件,将注册成功后的回显信息作为Flag值提交。这一个晚点说,不是第二题的答案。
2023-03-09 18:33:23
684
原创 [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
613
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
981
2
原创 记一个 DynELF 的使用例子
DynELF不能直接泄露/bin/sh的地址,因此需要使用read函数手动输入。实际上操作DynELF比较麻烦,也容易报错,可能是我自己的问题。但是相比之下DynELF的优势是快,并且用起来简单。无论如何也是一种做题的方法,记一笔。并且需要联网,不能比赛使用。
2023-02-28 15:52:50
193
原创 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
2981
1
原创 2021年网络空间安全江西省省赛 D模块答案
修复方法:修改留言板PHP文件,使用PHP中的 htmlspecialchars 转译特殊字符,并由于默认不会转译单引号,加上参数 ENT_QUOTES。发现方法:通过使用 Nmap 扫描目标服务器开放的端口,发现445端口开放着SMB服务。修复方法:修改 upload 方面的php文件 匹配文件头,若文件头是 application/octet-stream 即为PHP文件时拦截。发现方法:通过使用 Nmap 扫描目标服务器所开放的端口,能发现开放了一个 8848 与 40959 端口。
2023-02-13 14:35:22
535
原创 BUUCTF ciscn_2019_ne_5 & jarvisoj_fm
只开起了部分RELRO与NX。IDA中发现4个函数mainGetFlagAddLog主要只需要看这3个函数。
2022-11-01 01:28:11
800
原创 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
1839
7
原创 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
1885
原创 BUUCTF [OGeek2019]babyrop
不知道为什么远程进不去,后来选择了不用LibcSearcher,用题目提供的Libc进去了。分析完反汇编成C语言的程序源码后,就是常规的ret2libc了。由于本题是32位ELF,因此不需要rdi与ret栈对齐。思路有了,接下来是构造PoC与Payload。strlen 遇到 \x00会截断。使用puts函数进行泄露真实地址。成功本地获取shell。首先绕过 strlen。
2022-10-30 22:32:42
957
原创 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
912
原创 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
528
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人