今日份心脏骤停,噔噔咚! 每种保护介绍 FullRELRO 保护原理:其实就是不让你改写got表中的内容。 影响:不能劫持stack_chk_fail函数以绕过canary,不能劫持动态链接里面已经调用过的函数。(不懂libc快去翻我文章doge) Canary 保护原理:在所有函数的栈的末尾(比如rbp-8)插入一个值,叫做canary,在退出函数时检查是否和原来写入的canary值一致,如果不一致就调用stack_chk_fail退出程序。 影响:让你栈溢出多了一个步骤(比如泄露canary的值,比如劫持stack_chk_fail函数。比如逐字节爆破) NX 保护原理:让你栈上写入的东...

 我会用尽可能简单,偏向做题方面的角度给出SROP的基础知识,当然不是说掌握到只会做题就可以,而是说先知道怎么做,然后再gdb里面靠实操学习,个人认为这样是比较快和省力的方法。 首先,系统调用函数里有一个函数叫做sigreturn。 64中系统调用号为0xf,即15。 这个函数在我目前比较浅显的理解看来就是把所有寄存器都pop了一遍。可以想象到,在pop|ret的gadget数量不足的情况下,这将会非常好用。更赞的是,它可以改变所有寄存器,注意是所有,包括rip这个指令寄存器。所以我们调用这个函数之后不仅可以控制通常调用函数所用的rax,rdi,rsi,rdx,rcx等,还可以代替r...

  kfLTHs171Dp5   2023年12月07日   28   0   0 SROP初步理解CTFPWN

三个例子的引入 目前我遇到的格式化字符串漏洞(formatstring,后文简称fmt)主要存在于printf函数,本文也就以printf举例。 例一,标准格式的printf read(0,buf,33); printf("%s",buf); 例二,占位符与变量 printf("%d%c%s",a,b,c);//%d%c%s会访问变量以输出整型,字符等。 其中a,b,c为三个变量。 例三,会引发格式化字符串漏洞的printf read(0,buf,33); printf(buf); 对比起标准格式的printf,出现漏洞的原因是这里buf由用户控制,而如果用户输入如%d%c%...

  kfLTHs171Dp5   2023年12月06日   32   0   0 pwnfmt2023ISCTF格式化字符串

这是我在这次比赛中遇到最有意思的一题,不仅让我看到了一种有意思的题型,而且让我开始看懂了pwndbg的调试界面。 IDA里面是这样的,有直接可以提权的backdoor函数,有read函数,看似有点像ret2system。 让我们分析一下这个函数的读入逻辑:首先让你输入一个size值,read会总共分size次读入一个字节,并且写到s[i]的位置,由于i的递增,程序会在栈上一直往下写。确实是存在栈溢出,但是在我实际尝试过程中发现覆盖不到函数ret的地址。如何解决这个问题就是这题的关键。 其中i的值存在var_4的位置,v1在var_24的位置,v3在var_18的位置,而数组从s开始写入。 ...

  kfLTHs171Dp5   2023年12月06日   29   0   0 ISCTF特殊栈溢出pwn栈溢出wp

目前接触的随机好像都与地址有关,而且还有一个特性也就是只是基址随机,只要有任意一个地址就可以知道其他所有具体地址。(libc和pie保护) 这里将通过ezpie这道题介绍绕过pie的一种方式,泄露地址一获取全部地址的方法。本人还不太懂partiallywrite的原理,就不误人子弟了。 这里我们看到v5等于function函数的地址。很明显在勾引我们去泄露function的地址,问题是如何泄露。看看栈。v5是var_8 因为read读入三十个字节,所以我们控制的区域是buf后三十个字节的空间,虽然不能做到栈溢出,不过看到v5在我们buf可控制的空间里。 这里就可以通过写入buf顶到v5的位...

  kfLTHs171Dp5   2023年12月06日   28   0   0 ezpieISCTFpwn栈溢出

分析 这题题目已经在暗示用int数据的overflow了,不过不急,先分析一下。 保护 基本没啥保护,也挺好,适合不用搞太多花里胡哨的泄露,只需理解这题想告诉你的知识。 后门函数 看到有一个whatisthis函数,正是我们要的catflag函数。 main函数 login函数 main函数里需要的操作很简单,只需输入一个1就欧克。然后到login函数看看有啥。 check_passwd函数 看到有两个输入点,似乎可以存在栈溢出。但是想都不用想check_passwd肯定不会让你这么轻松溢出的。更别提这个函数给buf这个变量足足分配了512个字节,而我们输入0x199还离着远着呢。...

一,初步分析题目 话不多说,先看看IDA。 main里啥都没有,看看vuln。 笑死了,知道不用libc,还留下栈溢出勾引我。 shift+f12看到没有/bin/sh字符串,也没有system函数。 二,ROP链的概念及基础原理 这里就得引出一个新的概念了,叫做ROP链构造。这种方法可以让我们在没有system函数及/bin/sh字符串时调用system函数及让其读入/bin/sh成功提权。 WHY? 且听我慢慢道来 1.在64位中,所有的函数调用都与寄存器有着千丝万缕的联系。所有的函数的前六个参数分别从rdi,rsi,rdx,rcx,r8,r9读取,而第七个参数开始会从栈中读取。sy...

  kfLTHs171Dp5   2023年11月30日   28   0   0 ROP构造ret2syscallCTFPWN

现在我要介绍一种基于栈溢出的题型,但是这种题目没有直接给你一个形如 system() { binsh//这里意思就是一个直接提权的后门函数,但是我不记得具体长什么样 //反正IDA会给注释 } 的后门函数。但是题目中还是出现了system函数以及binsh字符串 这里我们最终目的还是让这个system函数执行binsh。问题就是如何将binsh传给system函数。这一点我们最后来讲解 看看例题BUUCTF的jarvisoj_level2。首先在IDA里随便逛逛,收集信息 main函数看到vuln函数和system函数,没什么东西。进vuln函数看。 看到一个read函数,能读进整整...

  kfLTHs171Dp5   2023年11月24日   23   0   0 栈溢出CTFPWN

本文要求有栈基础知识,纯萌新可以先搜搜栈的概念。 第一点,当程序涉及到输入的时候,栈就成了我们可以操作的一个空间,因为无论我们输入的是什么,栈都会帮我们保存这些数据。 第二点,任何一个函数都会在被调用的时候保存一个值,叫做ret,全名叫return。用于在该函数执行之后回到原来的程序继续执行命令。大致原理如下 图上蓝框表示栈里的ret值,就像你看书看一半去做了另一件事,在看到的那一页折了一下,而这个”折了一下“的值就保存在ret里,在栈的最底下,而在之后被调用函数可能还会将某些东西扔进栈,某些东西拿出来,但是在正常情况下,ret的值是不应该被改变的。 只要ret的值被改变,函数在结束之后跳...

  kfLTHs171Dp5   2023年11月22日   30   0   0 CTF栈溢出基础pwn

这两天因为试了一下动态调试发现环境没搭好,重新装了一个kali。然后就搞定了。(轻飘飘一句话背后至少有这两天20h的努力,从周天晚上到现在周二晚上,类目)。由于我比较懒,搭环境的时候没截图,就分享一下总共要装哪些东西,过两天再更一下VSCODE+pwndbg+自带DEBUG的动态调试。 1.WINDOWS的WSL,这个在微软商店下, 这里还有别的细节要调,可以再去搜搜。注意windows版本和wsl版本,看仔细在下。 2.kali,linux的发行版,似乎是Linux中偏安全的发行版,(毕竟人家都自带burpsuite,什么成分无需多言) 以上是微软商店安装,这个似乎比较看运气和网络,今天...

  kfLTHs171Dp5   2023年11月22日   35   0   0 CTFPWN环境kaliwsl

最近在学王爽老师的汇编的时候用dosbox的masm编译出了错, 如图,这种情况我的解决办法是把movtest的文件后缀加上.asm操作办法如图 首先在查看里面打开文件拓展名这一项,然后直接重命名文件,在后面加上.asm(这里大小写都可) 改完后缀之后长这样 然后回到dosbox里去修改即可(plus:有人说在这里加上.asm之后编译不了,可以试试,以及dos环境不区分大小写的编译报错肯定和大小写不会有关) 还有可能遇到一种问题是关于文件名过长的,dos环境不支持八位以上的文件名,具体>8还是>=8我不清楚,试试就知道了

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~