
pwn
文章平均质量分 75
苏璃只想划水
某不知名大学物理系学生,网络安全爱好者
展开
-
pwn入门07--整数安全
概述:前面的文章介绍了基础的栈溢出,其实还有进阶的栈溢出,但是我累了,进阶的栈溢出留着以后写。先来学习整数溢出。整数溢出在ctf中还是很常见的,但是整数溢出并不能直接getshell,通常配合栈溢出或堆溢出来利用。在 C 语言中,整数的基本数据类型分为短整型 (short),整型 (int),长整型 (long),这三个数据类型还分为有符号和无符号,每种数据类型都有各自的大小范围,(因为数据类型的大小范围是编译器决定的,所以之后所述都默认是 64 位下使用 gcc-5.4),如下所示:当程序中的数据原创 2021-10-30 15:33:14 · 481 阅读 · 0 评论 -
pwn小白入门06--ret2libc
概述:前文介绍了ROP的基本原理,但前面的方法有一些局限性,一旦目标程序调用的函数较少,或者使用动态编译,就会导致我们可以利用的gadget变少,从而无法达到利用效果。为了解决这种问题,我们可以选择使用ROP的方式,到动态链接库里面寻找gadget。即ret2libc。动态链接库:说动态链接库之前,先简单介绍一下库,库是一种软件组件技术,库里面封装了数据和函数,比如常用的printf,get函数。前文所说的ret2syscall所使用的程序是静态链接的,即在程序编译的时候就将整个库链接到程序中,一般这原创 2021-10-25 21:42:56 · 8666 阅读 · 3 评论 -
GCC 参数详解
PWN——GCC编译中几种保护打开和关闭的参数NX:-z execstack / -z noexecstack (关闭 / 开启) 栈不可执行,开启后不会把栈上的数据当作代码来执行Canary:-fno-stack-protector /-fstack-protector / -fstack-protector-all (关闭 / 开启 / 全开启) 打开后会向栈中插入一段特殊数据,在函数返回的时候验证这段特殊数据是否被改变,如果改变,则终止该程序。防止栈溢出。PIE:-no-pie / -原创 2021-06-19 11:58:34 · 2073 阅读 · 0 评论 -
pwn入门08---堆利用之uaf
use_after_free原理简单的说,Use After Free 就是其字面所表达的意思,当一个内存块被释放之后再次被使用。但是其实这里有以下几种情况:内存块被释放后,其对应的指针被设置为 NULL , 然后再次使用,自然程序会崩溃。内存块被释放后,其对应的指针没有被设置为 NULL ,然后在它下一次被使用之前,没有代码对这块内存块进行修改,那么程序很有可能可以正常运转。内存块被释放后,其对应的指针没有被设置为 NULL,但是在它下一次使用之前,有代码对这块内存进行了修改,那么当程序再次使原创 2021-02-21 16:36:13 · 1588 阅读 · 3 评论 -
pwn小白入门05---ret2syscall
ret2syscallROP原理:随着 NX 保护的开启,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果。攻击者们也提出来相应的方法来绕过保护,目前主要的是 ROP(Return Oriented Programming),其主要思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。gadget:所谓 gadgets 就是以 ret 结尾的指令序列,通过这些指令序列,我们可以修改某些地址的内容,方便控制程序的执行流程。原创 2021-02-21 22:18:59 · 3805 阅读 · 0 评论 -
pwn小白入门04---ret2shellcode
原理ret2shellcode,当程序当中没有system函数时,我们需要自己往栈上写入一段shellcode,然后控制eip使其指向shellcode的地址。shellcode 指的是用于完成某个功能的汇编代码,常见的功能主要是获取目标系统的 shell。在栈溢出的基础上,要想执行 shellcode,需要对应的程序在运行时,shellcode 所在的区域具有可执行权限。即必须关闭堆栈不可执行功能。例题(来自ctfwiki):首先checksec:发现程序没有开启任何保护,并且存在可读可写原创 2021-02-21 15:56:05 · 2086 阅读 · 3 评论 -
pwn小白入门03---ret2text
什么是栈溢出:栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数,因而导致与其相邻的栈中的变量的值被改变(比如gets函数,他不会去验证你输入的值的长度,通过这个函数,你可以往一个本身大小为4字节的数组中填入任意大小的数据,如果填入8字节的数据,将会导致栈溢出,进而程序报错)。就像是往杯子里倒水,水满了溢出来最后烫到你一样。最简单的栈溢出利用:ret2text通过栈溢出修改call指令保存在栈上的返回地址(eip的值),这样cpu执行ret指令的时候,就会将被修改的值从栈上取原创 2021-02-21 15:30:47 · 6794 阅读 · 1 评论 -
pwn小白入门02---汇编函数调用过程
C语言函数调用栈测试程序:#include<stdio.h>int sum(int x,int y){ int a=x+y; return a;}int main(){ sum(1,2); return 0;}编译指令gcc -m32 test.c -o test32位ida反汇编之后:main函数:sum函数:汇编指令:push ebp:将ebp寄存器中的值压入栈中pop esi :将栈中的数据原创 2021-02-21 13:17:48 · 1151 阅读 · 0 评论 -
pwn小白入门01---环境配置
操作系统:任意Linux或wsl;推荐:Ubuntu18.04+Ubuntu16.04IDA pro7.5(Windows):链接: https://pan.baidu.com/s/1pCMudY3RNBLQ3uobf8xBVg 提取码: asqa 复制这段内容后打开百度网盘手机App,操作更方便哦下载完后解压打开,免安装,双击即可运行;用来打开32位程序;用来打开64位程序;pwntoolspwntools是python的一个库,目前已适应python3,建议同时安装python2和p原创 2021-02-20 15:29:04 · 693 阅读 · 0 评论