文章首发于安全客 https://www.anquanke.com/post/id/238363
前言之前面试被问到了内核安全机制的相关问题,但是没有很好的回答出来,所以在此以学习的目的总结这方面的知识。欢迎各位师傅一起交流讨论。
防御框架说到Linux内核防御就不得不提起那张广泛流传的Linux Kernel Defence Map。这里放出两个不同版本的对比图,可以看到新版本中又对老版本的地图做了一些修改和添加。新图在老图的基础上修改了一些语言描述,并且调整了排列顺序,增加了ARM,Intel的硬件防护,clang的CFI,PAX_RAP。所以这里我会按照新图的顺序来讲解。
这个...
文章首发于安全客 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解压的文件夹和题...
这周打了一下ByteCTF,发现差距还是很大的,现在的很多堆菜单题都上2.31,新版本的题目需要多熟悉熟悉。
分析checksec保护全开,逆向的时候发现其中有prctl函数,用seccomp-tools查看沙箱逻辑。
看这个逻辑只能使用orw的方法获得flag。整个程序主要由三个功能,射击子弹,上膛子弹,购买子弹,购买子弹会malloc,同时有一次向chunk写数据的机会,购买的子弹会通过一个18字节大小的数据结构管理。chunk指向分配的堆块,next指向其他堆块形成一个链表,flag是标志位分别有0,1,2,表示不同的状态。
12345struct { char*...
第一次打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 ...
受到摸鱼和各种项目压力之后,终于发出来了,这次是强网杯中强网先锋的4道pwn题,剩下的pwn题还在陆续复现ing,在做了在做了ing
babymessage一道神奇的栈溢出题目,有三个功能,写name,写message,输出buf,其中message的数据会被strcopy到buf上。这里的溢出点是在写message的功能上,一开始只能够溢出16字节,覆盖掉栈变量+rbp的值。这里如果只是看反编译的代码是看不出问题的,一定要观察汇编代码,这也是我经常失误的地方不太爱看汇编,555555。
这里的写message的函数里带着一个局部变量size,而这个变量因为是局部变量,它是受到rbp的值...
b00ks这是一道asis ctf 2016的题目,主要功能是书本记录,除了基本的书本的增删改查功能,还有一个作者名称的改变。程序是一个基本保护除了canary其他全开的64位程序。
调试写exp的过程参考了ctf-wiki,先知社区一篇文章,和另外一个博客。很多细节上面的文章已经写的很详细了,我补充一些其他细节点。
这里漏洞的问题是出现在程序自定义的读取函数中,在读完规定长度的数据之后又会在末尾填一个0,这样就会溢出一个空字节。这种漏洞被称为OBO(off by one),这里一共使用了两次,第一次是先把作者name全部填满,这样溢出的0字节就在下一个区域中,随后这个程序有一个管理全局...
博客长草严重,上半年摸鱼太久。最近趁着有空开始复现之前的一些题目,这次做了2020RCTF的几道pwn题,本来还想着把MIPS那道题做出来再发,结果发现MIPS的调试还有很多问题,所以就先发常规一点的题。
note最经典的菜单堆题,还是note管理系统。64位程序,保护全开。主要功能有new,sell,show,edit,经典的增删查改,除了基本功能之外,还有两个额外的功能,一个是super note,一个是越界写数据但是只能操作一次。
这个题的super note是个幌子,最后完全没有用到。它的数据结构是三个部分组成,开头是一个指针指向我们申请的message区域,第二块是size,表...
一开始只是抱着开阔视野的心态来的,想着算法是IT行业哪里都会用到的东西,学完之后觉得卜老师不愧是教了13年的老师,很多地方都很受益,虽然不是专门做算法的,其中的很多思想都对以后的工作有一定启发。
观察问题的角度问题的可分解性想要解决一个复杂的问题,我们首先从这个问题最简单的实例入手,这个最简单的实例能用什么方法解决?复杂的问题能不能分解成简单的问题?
可行性解的形式以及解之间的变换关系问题的可行解的形式是什么?可行解的总数有多少?可行解能否一步一步的逐步构建出来?我们能否对一个可行解施加小幅度的扰动,将它变成另外一个可行解?
类似的问题和给定的问题类似的问题有哪些?解决类似问题的算法能够...
记录一下,我在docker容器中配置Mysql时遇到的坑,以及处理过程中学到的知识。
起因最近作业量多,任务重结果还是被点名出题(哭唧唧),没办法只能硬着头皮上。有了出题思路之后,和@wh1t3Pig交流之后得知需要使用docker-compose来布置出题环境。啥?卧槽?不能手动布置吗?算了,就当做是对我的考验。所以我开开心心的写好源文件之后,开始准备布置环境,那么到底是直接拉个Mysql,还是直接在容器内部装?在内部装又有各种问题。。。这里就把这些坑记录下来造福后人,同时也有一定的分析。
web server+mysql or in one container?在参考多个知名项目和比...
CNSS招新题目中有两道不错的Pwn题,拿来学习一波知识。然而其中有一道是内核ROP,复现了好几天。。还是有点问题,再加上研究生大作业集群来了(完全不能摸鱼,哭唧唧),所以那道内核题能做出来就放博客。
Sleepy Server这道题checksec发现防御全开,同时给了libseccomp,看来是对libc的调用有一定限制。
可以看到禁用了execve,不能通过直接拿shell获得flag。开始分析整个程序,看看有什么利用点。
比较容易的就能看到buf有一个溢出,但是溢出的数量有限只有0x10字节,随后看到我们输入的用户名和密码被传入一个函数判断,判断的结果正确才会进入漏洞点,我们...