摘要: Use After Free 译为free之后的使用 内存块被释放后,其对应的指针没有被设置为NULL 这给我们修改并且执行被释放内存的机会 这里利用了堆的fastbin机制 fastbin为了快速的利用堆空间,将较小的chunk统一管理 具体是把相同大小的chunk单向链表连接,并且满足后进入链表 阅读全文
posted @ 2019-11-24 21:55 Papayo 阅读(868) 评论(0) 推荐(0) 编辑
摘要: partial overwrite 部分覆盖 用到该方法的情况是:存在PIE并且获取某函数地址有一定难度 这时候因为PIE不会修改地址最后几位数如图 可以发现每个函数之后末尾3位不同 所以我们可以仅修改末尾的4位(因为每个字符相当于占两位 无法只修改三位) 这样就有一定的概率返回到我们想要的正确函数 阅读全文
posted @ 2019-11-24 17:01 Papayo 阅读(487) 评论(0) 推荐(0) 编辑
摘要: stack pivoting 翻为堆栈旋转 操作是利用' jmp esp' 控制程序流程 X-CTF Quals 2016 - b0verfl0w 可以溢出并且没有开启NX 但是这里只允许溢出14位 很难进行rop 那么可以在栈上布置shelcode 现在的目标就是让eip跳到栈上shelcode位 阅读全文
posted @ 2019-11-24 10:00 Papayo 阅读(363) 评论(0) 推荐(0) 编辑
摘要: 给出了libc.so 应该是计算偏移 图上说明的很清楚了 通过case1,覆盖到标志位,就可以通过case2 把表示位puts出来 puts遇到\x00停止 标志位最后两位一定是\x00 sendline末尾自动加上\n 覆盖掉\x00 所以puts就不会停止 这也方便我们recv的定位 泄露出标志 阅读全文
posted @ 2019-11-19 09:36 Papayo 阅读(1166) 评论(5) 推荐(0) 编辑
摘要: 打开程序看,菜单已经说明的很清楚了 1存在栈溢出,2存在format 不过checksec了发现 存在栈保护,这里的format就可以泄露出标志位 经过尝试,%x只能输出8bit的数 这里使用%p 先试试水 第6个参数就是我们的输入首地址了 然后往下找标志位 计算出是第23个参数 验证一下 是第23 阅读全文
posted @ 2019-11-18 19:53 Papayo 阅读(503) 评论(0) 推荐(0) 编辑
摘要: 代码最后调用了v3为基础,v14+1为偏移的地址的函数 而v14=1 如果一次都没有通过判断的话就直接调用v3地址的函数 然后发现v2可以溢出,并且可以覆盖掉v3 所以我们把v3覆盖为sub_80486CC的地址(此处输出flag) 之后要解决的就是不让v14改变 直接让第一个判断函数不通过即可 ' 阅读全文
posted @ 2019-11-18 16:09 Papayo 阅读(671) 评论(0) 推荐(0) 编辑
摘要: 找了半天发现浏览器太小没有看见给的libc.so链接 首先是字符串的比较 read是读到'\n'停止,而strlen是到'/0'就停止 所以我们可以让第一个字符为'\x00'绕过字符串比较 然后就是把v5覆盖得大一点 好让后面的read有机会溢出 然后就是libc.so泄露 libc.so可以给我们 阅读全文
posted @ 2019-11-14 20:41 Papayo 阅读(1875) 评论(0) 推荐(0) 编辑
摘要: 当题目未提供libc.so的时候 可以使用DynELF寻找我们需要函数的地址 关于DynELF(https://blog.csdn.net/qq_40827990/article/details/86689760) 我的理解是,DynELF通过它自己有的各种libc.so去爆破该ELF的libc.s 阅读全文
posted @ 2019-11-14 20:37 Papayo 阅读(557) 评论(0) 推荐(0) 编辑
摘要: 打开IDA直接F5如下 经过分析箭头处才是最关键的 encode函数虽然是引用,但是函数内并没有对其进行修改,而是将其副本base64加密 查询到 flllag 和 sttr_home 的值 计算v13的值 计算过程直接复制粘贴,修改到能编译就行了 然后异或出来goal 也就是我们的输入 #incl 阅读全文
posted @ 2019-11-11 12:11 Papayo 阅读(504) 评论(0) 推荐(0) 编辑
摘要: 太水了 如图 只要控制var的第53位==17即可 阅读全文
posted @ 2019-11-10 09:37 Papayo 阅读(713) 评论(0) 推荐(0) 编辑