12 2022 档案
buuoj-pwn-ciscn_2019_final_10
摘要:buuoj-pwn-ciscn_2019_final_10 总结 题目分析 glibc ubuntu18.04,对应GLIBC2.27,对于这题,我们知道double free没检查就行 逆向分析 关键函数一 第一个箭头所指没法绕过,随便输入就行,第二个箭头所指是重点。这里将无符号型强制转换为有符号
qgb-2022-final-pwn-revm
摘要:REVM 总结 这是一道很简单的题目,但是我也学到了很多!(虽然比赛时失误没看到return导致打栈地址失败),收获如下: 静态编译没符号可以使用导入sig文件或者bindiff一个对应版本的glibc 堆题orw的方法梳理了一遍: hook + gadget + rop fsop + gadget
cscctf_2019_qual_signal
摘要:cscctf_2019_qual_signal 总结 没开pie,got表可写的时候,用magic gadget会有很好的效果 多次调用ret2csu的时候注意利用重叠部分缩减payload 可以通过read的返回值存储在rax来通过输入控制rax 题目分析 $ checksec cscctf_20
buuoj-pwn-pwnable_bf
摘要:buuoj-pwn-pwnable_bf 总结 bss段上存储libc地址的地方有很多,最值得注意的就是stdin、stdout brainfuck的认识(虽然这题没用 [、] ),如下: 题目分析 简单一看就知道本题实现了brain fuck解释器,具体逻辑如下: int __cdecl do_b
buuoj-pwn-gwctf_2019_shellcode
摘要:buuoj-pwn-gwctf_2019_shellcode 总结 可见字符shellcode优先判断能不能利用\x00非预期一手 题目分析 IDA打开,看不了main函数,但是汇编也挺简单的,看看汇编就知道是打开沙箱,输入shellcode,然后判断是否是可见支付,然后执行shellcode 沙箱
buuoj-pwn-starctf_2019_babyshell
摘要:buuoj-pwn-starctf_2019_babyshell 逆向分析 GLIBC ubuntu16,不涉及内存管理也没啥需要讲的 关键函数 主函数 __int64 __fastcall main(__int64 a1, char **a2, char **a3) { _BYTE *buf; /
pwnable.kr-pwn-fd
摘要:pwnable.kr-pwn-fd 总结 主函数参数argv[1]就是直接传入的值 在linux中,s指的是“强制位权限”,位于user或group权限组的第三位置 题目分析 ssh连上以后,得以下 fd@pwnable:~$ ls fd fd.c flag fd@pwnable:~$ ls -l
buuoj-pwn-ACTF_2019_message
摘要:buuoj-pwn-ACTF_2019_message 总结 低版本存在uaf时优先考虑double free 给信号注册函数的函数signal() 逆向分析 glibc版本 ubuntu18.04也就是glibc2.27 对于这道题,我们只需要知道该版本的tcache利用没啥限制,直接double
secconctf-2022-pwn-babyfile
摘要:secconctf-2022-pwn-babyfile 总结 可以使用_IO_file_doallocate + _IO_file_sync实现缓冲区指针和读写指针初始化 利用_IO_obstack_file结构体攻击时,fp.flag最好是(0xfbad1800 | 0x8000),用别的可能会造
NCTF-2022-pwn-ezlink
摘要:NCTF-2022-pwn-ezlink 总结 利用_IO_obstack_file结构体进行攻击时,最好打_IO_2_1_stdin_ 利用_IO_obstack_file结构体进行攻击时,栈迁移布置如下: gg1 = libc.search(asm("mov rdx, qword ptr [rd
强网拟态-2022-pwn-only
摘要:强网拟态-2022-pwn-only 总结 该题的沙箱我们可以通过execveat绕过,但是注意execveat是个系统调用 2.29以后存在一个key(bk)检查,不能直接double free 可以通过已经申请一个存在的tcachebins尾往上一点的地址修改size和直接伪造double fr