本文在个人blog上率先发布743K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9r3!0K6N6s2y4Z5j5i4u0C8i4K6u0V1M7s2u0G2i4K6u0W2k6$3W2@1K9s2g2T1i4K6u0W2K9h3!0Q4x3V1j5`. nc连一下??? 这是干什么 难道限制7byte,还会ban字符 出题人怎么这么坏啊这到底在考什么格式化字符串??? wc,我是天才可以还原一下函数char buf[8]; scanf("%7s", buf); printf(buf); 出canary了 %i$s这内存里也没flag啊 ez-nc的文件头 有点奇怪的题 有seccomp ban 了execve和execveat用orw c++编译 全开 我去,2.39 有backdoor function,那还用个蛋的orw 这笔记看着就高级翻译一下根本看不懂这出题人怎么这么坏啊•᷄ࡇ•᷅ 什么叫main函数里还有加密???不对,不是加密,这是自校验 底下这一块才是要看的兮,这c++反汇编我还不太看的懂 慢慢看了 先清零buf 376+16字节malloc 了0x200,512bytesv23 = begin , v29=the chunk's end*(__m128i *)&buf[376] = _mm_unpacklo_epi64((__m128i)v23, (__m128i)v23); 将两个 64 位整数交叉组合成一个 128 位的向量 两个参数都是v23,故高64低64都是v23sub_8A60 和 sub_3570:传入了 buf 的起始地址先看看8a60 控制台这一块 ban execve buf共用 用来int (str)的 8a60结束后free buf的,6720也是看看case1 calloc 打印calloc的返回地址 单个输入 v9 (items) 和 v42 (stride) 被限制在 32 位以内 n32_1 = (std::ios_base *)(v42 * v9); 乘积被存入了 64 位的 n32_1 中 n32 = (unsignedint)n32_1; 强制将 64 位的 n32_1 转换为 32 位的 unsigned int v13 = calloc(n32, 1uLL); 使用截断后的 32 位小数值去分配堆内存 存在 Integer Truncation (高位砍掉)这样就可以伪造所记录的calloc的chunk大小看看case2 看看case3什么叫引导异步调度器 启动后台的任务分发系统 创建总控台(Scheduler Control Plane):分配一个全局的调度器控制块(queue_ctrl),里面记录了调度器的状态,并且初始化了安全策略(strict_policy = 1)创建任务槽(Task Descriptors):循环 8 次,创建 8 个任务结构体(Task 0 到 Task 7)。每个结构体里预先填好了默认的回调函数指针(handler)和参数(context) 可以通过case2的溢出覆盖v10看看case4 4可以泄露addr 看看case5case6 UAF看看case7 可以用它改fd这就是edit看看case8 Case 8 表面上是一个配置节点的业务功能,但在 Pwn 攻击链中,它是一个无损的 64 位任意内存内容填充器 看看case9可以通过case2把strict_policy改成0看看case10看看case11 原来是凑数的 2.32以上就有safe-linking了有UAF时就可以直接得到heap_base_addr,pwn.college里写过太多了 这题的阅读实在有点困难•᷄ࡇ•᷅ 伪c可比伪cpp清秀多了
登录后可查看完整内容
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290986.htm
[原创]polarisctf招新赛 Writeup-pwn
296 浏览
4 回复
请调整一下WP显示格式,现在格式有些错乱,谢谢!
winmt
请调整一下WP显示格式,现在格式有些错乱,谢谢!
好的,第一次发,不好意思
请调整一下WP显示格式,现在格式有些错乱,谢谢!
好的,第一次发,不好意思
winmt
请调整一下WP显示格式,现在格式有些错乱,谢谢!
ok了,麻烦师傅了
请调整一下WP显示格式,现在格式有些错乱,谢谢!
ok了,麻烦师傅了
shark_pro
ok了,麻烦师傅了
好的,感谢~
ok了,麻烦师傅了
好的,感谢~