自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 啥也不会还想学PWN

今天学习改写got表。首先我们要知道,GOT表是数据段用于地址无关代码的LinuxELF文件中确定全局变量和外部函数地址的表。ELF中有.got和.plt.got的两个表,.got表用于全局变量的引用地址,.got.plt用于保存函数引用的地址。PLT是Linux ELF文件中用于延迟绑定的表。...

2022-05-18 21:32:12 123

原创 啥也不会还想学PWN

今天我们继续学习rop的应用。如下图:我们先看一下原始的几个寄存器。这里,是r14,r13,r12d。在这段代码中,我们重点关注call的地方,那是我们主要的工作。可以看到,这里是r15+rbx*8,接下来我们就要找r15 的相关信息。设置断点,调试,找到我们想要操纵的寄存器的存储状况。这个r15就是我们想要调用的。我们调试一下rdi的,因为rdi的值是执行的第一个起始地址。x/s 得:这就是一个/bin/sh。这样就可以直接跳转到excv来执行了。

2022-05-16 16:27:37 114

原创 啥也不会还想学PWN

昨天介绍了rop,今天继续学习rop。通用rop。我们知道,在64位系统中,函数的前六个参数是通过寄存器来传递的。但大多数时候,我们很难找到每一个寄存器对应的gadget。这个时候,我们可以利用64位系统下的-libc-csu-init中的gadgets。这个函数是用来对libc进行初始化操作的,而一般的程序都会调用libc函数,所以这个函数一定会存在。那这个函数到底干了什么呢?'我们打开看:从'40061A'开始看,直到'400622',一共pop了6个寄存器,然后ret,也就是说

2022-05-12 20:04:26 87

原创 啥也不会还想学PWN

今天,是rop的介绍与编写。什么是rop呢?上一次我学习了一种栈溢出的思路:pop rdi ret ;/bin/sh+字符串地址;system。像这种形式的传参和调用,或者说这种编程方法,就叫做rop。rop,是英文返回导向编程的简称,实际上就是程序中以一大堆ret的拼凑来完成代码逻辑。所以,这些ret的如何拼凑?(编写?)以system(“/bin/sh”)为例:我们需要做的,是将rdi这个地址改写为/bin/sh的字符串地址,然后call system。如果我们不能执行she

2022-05-11 21:03:56 125

原创 啥也不会还想学PWN

今天继续学习PWN的攻击方式。之前学习的攻击方式,都是在理想环境下实现的。比如,系统会提供一个现成的system或者execv函数来实现劫持。那么换到实际的环境中,应该如何操作呢。其实,如果我们拿到libc中函数的地址,我们可以直接调用libc中的函数,然后传递参数,使用call 函数调用。接下来问题就在如何传参了。思考:如果是直接move然后+call 的话,那就相当于是ret2shellcode,在还没法写shellcode代码的情况下,我们需要考虑别的办法。后来我也不知道怎么做

2022-05-08 21:14:24 221

原创 啥也不会还想学PWN

昨天,我们学习到,我们可以把程序的返回地址改写成我们想要的地址,达到控制流劫持的目的。那么,问题来了,我们需要思考:返回怎样的地址呢?

2022-05-04 21:06:30 80

原创 啥也不会还想学PWN

今天接着学习栈溢出的基本知识。学习栈溢出首先就要明白栈溢出的过程。我们直接拿实例来学习(这样效率会高一点)如上图所示,这是一个栈段的简化图。栈由高地址向低地址增长,图中上方是高地址,下方是低地址。我们看,buf 的长度为80,紧邻b函数的rbp指针和返回地址。此时,整个栈没有问题,没有发生栈溢出。可是,buf的长度是可以人为改变的,那么如果我们向buf中读入的长度超过80字节呢?我们假设,向buf中读入:'X'*80+'A'*8+'B'*8,这样,长度超过,发生栈溢出。那么,就会发生下面图中的情

2022-05-03 20:20:08 295

原创 啥也会不还想学PWN

今天,学习栈溢出的原理。我们知道,栈溢出的漏洞利用,是PWN中一个很重要的内容。从之前的知识中我们可以知道,栈的作用主要是存储函数调用的相关信息以及函数的局部变量。这些局部变量通常为数组或者是输入的缓冲区(buf)。函数的调用信息主要指的是返回地址和栈底指针(rbp)。在栈存储数据的时候,会发生这样一种情况:函数中的存储在栈中的局部变量的数组边界检查不严时,发生越界,造成用户输入覆盖到缓冲区之外的数据内容(例行检查检查的金丝雀就是用来检查的,具体原理。。之后再看)。如果在检查栈保护(Stack)

2022-05-02 20:43:22 177

原创 啥也不会还想学PWN

今天收尾Linux基础。在Linux环境中,二进制可执行文件的类型是ELF文件,而ELF文件的信息主要存储在ELF文件的头部信息中,这些信息包括指令运行的架构、程序的入口等。那我们如何查看的ELF文件的头部信息呢?指令:readelf -h <elf_name> 。这样就可以查看ELF文件的头部信息。在ELF文件中,有很多节,放在ELF文件的头部,查看:readelf -S <file>。.txt:存放程序运行的代码;.rdata:存放一些字符串等不可更改的数据;

2022-04-30 21:24:47 68

原创 啥也不会还想学PWN

今天继续,Linux的基础知识。在Linux系统中,保护层级有四层:ring0~ring3.一般来说,用到的只有ring0和ring3这两个。其中,0为内核部分,3位用户部分。权限:一般来说,权限有3个:可读可写可执行。读-R,写-W,执行-X。例如:赋予一个可执行文件的执行权限:chmod+Xfilename。物理地址和虚拟地址:物理内存就是现实的计算机中的内存,而虚拟内存是物理内存经过MMU转换之后形成的内存空间。虚拟内存要比物理内存大得多。栈:(再重复一遍吧)这是一种特殊的

2022-04-29 20:11:38 1475

原创 啥也不会还想学PWN

今天继续学习两个方面的知识:计算机的大端序和小端序、文件描述符。计算机的大端序和小端序:简单来讲就是计算机储存数据的两种不同模式。大端序储存:数据的高位储存在计算机地址的低位,数据的低位储存在计算机地址的高位;而小端序则正好相反。例如:数据0x0123456789abcdef,大端序储存。0位低位地址,7为高位地址。输入是就应该是:\x01\x23\x45\x67\x89\xab\xcd\xef同样,小端序的情况:输入的时候就应该是:\xef\xcd\xab\x89\x67\x45\

2022-04-28 20:19:31 363

原创 啥也不会还想学PWN

今天来看Linux的一些基础指令。ls -显示当前的目录。这是我的ubuntu 16.04版本的一个演示情况。它表示了在根目录下的目录。cd-切换目录。(1)cd/home/ctf 这一类叫绝对路径,是为档案或者文件的位置做指向。(2)cd ./Desktop这是一类相对路径。./是当前目录,../是上一个目录。pwd-打开当前目录。mkdir-创建目录。相同的,rmdir就是删除目录。rm-删除文件。格式:rm flagcat-输出文章内容。(类似于查看)格式:cat

2022-04-27 21:23:15 2211

原创 啥也不会还想学PWN

本人真小白,真的0基础。PWN 是CTF比赛中比较难的部分。首先要做的就是把基础知识打牢。预备知识:C语言,汇编语言,Linux基础等。栈,是一段特殊存取的内存。它好比一个盒子,数据好比一本本的书。先放进的书会被放在盒子的最底部,后放进的书会被放在盒子的最上面。这是栈的LIFO原则。栈溢出。在存放数据的过程中,如果不注意检测数据的顶端是否超过栈的顶端,容易产生栈溢出。一些汇编语言的常用指令:move A ,B 表示把寄存器B中的内容放到A当中;ret 返回主程序;call 调用一个子程序

2022-04-26 20:06:32 2764

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除