03 2021 档案

摘要:检查下保护机制: 64位的程序,没有开启什么保护,这样就可以写shellcode ida看下逻辑: _start调用vuln函数,然后exit,那我们看下vuln: sub rsp 0x20,说明栈帧大小只有0x20 但是接下来的read,却可以读取0x200个字节,这就造成了栈溢出 这是一个汇编写 阅读全文
posted @ 2021-03-27 20:19 田埂 阅读(90) 评论(0) 推荐(0) 编辑
摘要:ida看下程序逻辑: 这是一道格式化字符串的题,并且给了栈址和pie基址 我以为我可以秒它,直到我发现脚本越写越多 思路就是在返回地址写rop,注意一定要加ret,因为远程的环境可能是ubuntu 20 先写rop拿libc地址,然后再写rop拿shell 要注意的问题是,写好自动判断各个地址前四位 阅读全文
posted @ 2021-03-27 19:44 田埂 阅读(125) 评论(0) 推荐(0) 编辑
摘要:看名字应该是道堆题,ida分析一下,主函数是这样的: 主要功能就是encrypt,和decrypt 那看下encrypt函数: 就是申请一个堆块然后写数据,再把数据和输入的key值异或一下存储在堆块上 再分析下decrypt函数: 会把堆块的内容逐个与key异或后,打印出来,也就是说具有show的功 阅读全文
posted @ 2021-03-27 14:13 田埂 阅读(96) 评论(0) 推荐(0) 编辑
摘要:检查下保护机制: 32位程序,没有开启canary ida逆向看一下情况: 去除了符号表,从参数可以看出sub_8049010是setvbuf(),也可以gdb调试验证那就不去管它,直接看myFun,但是ida报错,没办法反编译: 它说在0x80493A1分析失败,那看下0x804931到底调用了哪 阅读全文
posted @ 2021-03-24 23:06 田埂 阅读(98) 评论(0) 推荐(0) 编辑
摘要:检查下保护机制: 看下程序逻辑: 逻辑相对明确,增删改查,增改放在一块 看下alloc函数,这不是库函数,是一个自己定义的函数 看下delete函数: 没有置空指针,造成uaf,可以用来拿libc地址 然后libc-2.23下的double free 拿malloc_hook就可以了 注意one_g 阅读全文
posted @ 2021-03-22 10:32 田埂 阅读(126) 评论(0) 推荐(0) 编辑
摘要:检查一下开启的保护机制: 用ida分析一下程序: 主函数是这样的: 走到construct_animal()函数: 申请了一个堆块,用以存储动物结构体,看起来这个堆块上有函数指针 并且会把anmial->name初始化为0x24个空格,下面change_name时会用到 main函数调用完const 阅读全文
posted @ 2021-03-09 08:17 田埂 阅读(90) 评论(0) 推荐(0) 编辑
摘要:打开题目链接,显示的页面是这样的: 提示说需要以admin身份登录,那用burp suite抓包看一下: 我们修改cookie值,把tm_admin设置为1,tm_user设置为admin的md5值,这样发送过去就拿到了flag: 阅读全文
posted @ 2021-03-09 08:16 田埂 阅读(78) 评论(0) 推荐(0) 编辑
摘要:题目提供了elf文件和libc库,以及源代码,源码如下: #include <iostream> #include <vector> template<typename T> class safe_vector: public std::vector<T> { public: void wipe() 阅读全文
posted @ 2021-03-07 23:31 田埂 阅读(216) 评论(0) 推荐(0) 编辑
摘要:题目提供了elf文件和源码 源码是这样的: global _start section .text %macro call 1 ;; __stack_shadow[__stack_depth++] = return_address; mov ecx, [__stack_depth] mov qwor 阅读全文
posted @ 2021-03-07 23:29 田埂 阅读(159) 评论(0) 推荐(0) 编辑