风之栖息地

风之栖息地

habitat of wind

2020强网杯 强网先锋のpwn
受到摸鱼和各种项目压力之后,终于发出来了,这次是强网杯中强网先锋的4道pwn题,剩下的pwn题还在陆续复现ing,在做了在做了ing babymessage一道神奇的栈溢出题目,有三个功能,写name,写message,输出buf,其中message的数据会被strcopy到buf上。这里的溢出点是在写message的功能上,一开始只能够溢出16字节,覆盖掉栈变量+rbp的值。这里如果只是看反编译的代码是看不出问题的,一定要观察汇编代码,这也是我经常失误的地方不太爱看汇编,555555。 这里的写message的函数里带着一个局部变量size,而这个变量因为是局部变量,它是受到rbp的值...
glibc堆利用之off by one的两道CTF题目
b00ks这是一道asis ctf 2016的题目,主要功能是书本记录,除了基本的书本的增删改查功能,还有一个作者名称的改变。程序是一个基本保护除了canary其他全开的64位程序。 调试写exp的过程参考了ctf-wiki,先知社区一篇文章,和另外一个博客。很多细节上面的文章已经写的很详细了,我补充一些其他细节点。 这里漏洞的问题是出现在程序自定义的读取函数中,在读完规定长度的数据之后又会在末尾填一个0,这样就会溢出一个空字节。这种漏洞被称为OBO(off by one),这里一共使用了两次,第一次是先把作者name全部填满,这样溢出的0字节就在下一个区域中,随后这个程序有一个管理全局...
2020RCTF 几道pwn题的复现
博客长草严重,上半年摸鱼太久。最近趁着有空开始复现之前的一些题目,这次做了2020RCTF的几道pwn题,本来还想着把MIPS那道题做出来再发,结果发现MIPS的调试还有很多问题,所以就先发常规一点的题。 note最经典的菜单堆题,还是note管理系统。64位程序,保护全开。主要功能有new,sell,show,edit,经典的增删查改,除了基本功能之外,还有两个额外的功能,一个是super note,一个是越界写数据但是只能操作一次。 这个题的super note是个幌子,最后完全没有用到。它的数据结构是三个部分组成,开头是一个指针指向我们申请的message区域,第二块是size,表...
算法课程总结
一开始只是抱着开阔视野的心态来的,想着算法是IT行业哪里都会用到的东西,学完之后觉得卜老师不愧是教了13年的老师,很多地方都很受益,虽然不是专门做算法的,其中的很多思想都对以后的工作有一定启发。 观察问题的角度问题的可分解性想要解决一个复杂的问题,我们首先从这个问题最简单的实例入手,这个最简单的实例能用什么方法解决?复杂的问题能不能分解成简单的问题? 可行性解的形式以及解之间的变换关系问题的可行解的形式是什么?可行解的总数有多少?可行解能否一步一步的逐步构建出来?我们能否对一个可行解施加小幅度的扰动,将它变成另外一个可行解? 类似的问题和给定的问题类似的问题有哪些?解决类似问题的算法能够...
Docker中的Mysql配置问题处理与思考
记录一下,我在docker容器中配置Mysql时遇到的坑,以及处理过程中学到的知识。 起因最近作业量多,任务重结果还是被点名出题(哭唧唧),没办法只能硬着头皮上。有了出题思路之后,和@wh1t3Pig交流之后得知需要使用docker-compose来布置出题环境。啥?卧槽?不能手动布置吗?算了,就当做是对我的考验。所以我开开心心的写好源文件之后,开始准备布置环境,那么到底是直接拉个Mysql,还是直接在容器内部装?在内部装又有各种问题。。。这里就把这些坑记录下来造福后人,同时也有一定的分析。 web server+mysql or in one container?在参考多个知名项目和比...
CNSS招新题中的一道ROP题
CNSS招新题目中有两道不错的Pwn题,拿来学习一波知识。然而其中有一道是内核ROP,复现了好几天。。还是有点问题,再加上研究生大作业集群来了(完全不能摸鱼,哭唧唧),所以那道内核题能做出来就放博客。 Sleepy Server这道题checksec发现防御全开,同时给了libseccomp,看来是对libc的调用有一定限制。 可以看到禁用了execve,不能通过直接拿shell获得flag。开始分析整个程序,看看有什么利用点。 比较容易的就能看到buf有一个溢出,但是溢出的数量有限只有0x10字节,随后看到我们输入的用户名和密码被传入一个函数判断,判断的结果正确才会进入漏洞点,我们...
花式栈溢出学习
继续进行着栈溢出的练习,这次是参考了ctf-wiki上面的演示题目,在复现过程中的一些记录。 over安恒月赛的题目,首先看程序保护,开启了NX,不能写shellcode,同时分析了程序结果发现buffer有0x50,但是输入有0x60也就是说只能覆盖rbp和ret地址,所以必须要改变栈的位置。 首先是一个trick,里面读入的函数是read,所以读入的数据是不会自动加上\0的,其他的两个函数gets和scanf都会对读入的字符串加上\0截断。利用这个差异性,我们只要填入0x50个非0数据,这样puts就会打印出rbp的值。泄露出栈基址之后,我们就能利用相对偏移来确定题目随意的栈地址。 ...
基础ROP学习
最近开始入门pwn,在白泽新手oj那里学了一波之后开始自己学剩下的内容。看到atum大佬推荐的三道基础ROP题目,就练习一下,学习思路总结经验。在网上找题的过程中发现vss基本上绝迹了。。。辛苦一番之后终于找到,为了后面的人也能快速找到题目我就把三道题一起上传了。 http://hurricane618.me/resource/basic-rop/vss http://hurricane618.me/resource/basic-rop/ropasaurusrex http://hurricane618.me/resource/basic-rop/r0pbaby r0pbaby一道强化版...
2019RCTF 部分Web的WriteUp
一年一度的RCTF开始了,又能学一波骚操作,RCTF的web题目去年就非常好,今年也特别出色。由于研究所月赛的原因没有参与其中,所以赛后来复现一下。 nextphp123456789101112<?php if (isset($_GET['a'])) { eval($_GET['a']); } else { show_source(__FILE__); } 一个代码执行,但是肯定没有这么简单,执行phpinfo查看到disable_function之后,发现禁用了已知范围内的所有危险函数,并且还把之前考差过的putenv也禁用了。这样就没有办...
2019DDCTF 未解决的web题 writeup
homebrew event loop一道python的代码审计题目,题目的入口点会检测url中携带的参数并且初始化session的值。 123456789101112def entry_point(): querystring = urllib.unquote(request.query_string) request.event_queue = [] if querystring == '' or (not querystring.startswith('action:')) or len(querystring) > 100: querystring =...
avatar
hurricane618
May the wind guide you