风之栖息地

风之栖息地

habitat of wind

西湖论剑 IoT闯关赛 2020 pwn3 ezarmpwn
文章首发于安全客 https://www.anquanke.com/post/id/224972 前言打了安恒举办的西湖论剑比赛,题目都是跑在一个开发板上的,通过数据线连接开发板的otg接口能访问题目环境。pwn题目一共有三道,其中有一道题目因为逻辑上的问题导致能比较简单的获得flag,另外一道题目是boa服务器在处理http认证过程中,发生栈溢出。我们这里分析的是这次比赛的第三道pwn题ezarmpwn。 题目分析通过file和checksec能够知道程序为32位的arm小端程序,开启NX保护,没有PIE和canary保护。 主办方给出的libc为2.30,把libc解压的文件夹和题...
2020 bytectf gun writeup
这周打了一下ByteCTF,发现差距还是很大的,现在的很多堆菜单题都上2.31,新版本的题目需要多熟悉熟悉。 分析checksec保护全开,逆向的时候发现其中有prctl函数,用seccomp-tools查看沙箱逻辑。 看这个逻辑只能使用orw的方法获得flag。整个程序主要由三个功能,射击子弹,上膛子弹,购买子弹,购买子弹会malloc,同时有一次向chunk写数据的机会,购买的子弹会通过一个18字节大小的数据结构管理。chunk指向分配的堆块,next指向其他堆块形成一个链表,flag是标志位分别有0,1,2,表示不同的状态。 12345struct { char*...
2020 TCTF final SecureJIT writeup
第一次打final 被打的头都炸了,555555。过去三周了,还是水一下这道签到题。 题目情况作者搞到了一个ruby的jit——rubi,其中打了patch,让执行代码的区域变成不可写的情况。 12345678910111213141516diff --git a/engine.c b/engine.cindex 79e83d2..2350d59 100644--- a/engine.c+++ b/engine.c@@ -137,6 +137,11 @@ static int execute(char *source)init();lex(source);parser();+ long ...
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的值。泄露出栈基址之后,我们就能利用相对偏移来确定题目随意的栈地址。 ...
avatar
hurricane618
May the wind guide you