
pwn
文章平均质量分 72
pwn学习笔记
西杭
温水煮了将军梦
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ARM架构下的 buffer overflow 初探
ARM架构下的代码重用攻击(ROP)实践原创 2022-04-30 23:42:36 · 1752 阅读 · 0 评论 -
系统与软件安全研究(二)
一篇arxiv 2021 基于x86-64架构下自动化ROP利用方法原创 2022-03-05 22:06:18 · 445 阅读 · 0 评论 -
动态链接的延迟绑定
本文转自公众号平凡路上,原文链接原理针对动态链接会减速程序运行速度的现状,操作系统实现了延迟绑定(Lazy Binding)的技术:函数在第一次被调用时才对函数进行绑定。通过延迟绑定大大加快了程序的启动速度。而ELF则使用了PLT(Procedure Linkage Table,过程链接表)的技术来实现延迟绑定。Example#include <stdio.h>// g...转载 2020-03-02 19:35:21 · 1096 阅读 · 0 评论 -
花式栈溢出技巧之stack smash
原理在程序添加了canary保护后,如果我们读取的buffer覆盖了对应的值时,程序就会报错,而我们一般并不会关心报错信息。但stack smash技巧则是利用打印这一信息的程序得到我们想要的内容。这是因为程序在启动canary保护之后,如果发现canary被修改的话,程序就会执行__stack_chk_fail函数来打印argv[0]指针所指向的字符串,正常情况下,这个指针指向程序名。...原创 2020-03-01 18:29:51 · 2105 阅读 · 0 评论 -
二进制学习基础文章整理
二进制、栈溢出入门笔记整理以下是我入门二进制的一些笔记整理链接,特此整理出来,方便自己查阅,也方便读者阅读。必备知识《linux程序的常用保护机制》《PLT表和GOT表学习》《ELF文件格式学习》《动态链接的延迟绑定》《pwntools使用教程》《ctf wiki pwn(入门实操)》基础ROP《基本ROP之ret2text》《基本ROP之ret2shellcode》...原创 2020-03-01 10:53:40 · 4155 阅读 · 4 评论 -
花式栈溢出技巧之frame faking
frame faking构造一个虚假的栈帧来控制程序的执行流原理之前所讲的栈溢出不外乎两种方式:控制程序EIP控制程序EBP其最终都是控制程序的执行流。在frame faking中,我们所利用的技巧辨是同时控制EBP和EIP,这样我们在控制程序执行流的同时,也改变程序栈帧的位置。函数的入口点和出口点入口点push ebp #将ebp压栈mov ebp, esp ...原创 2020-02-29 19:25:36 · 2812 阅读 · 5 评论 -
栈溢出之ELF文件格式学习
ELF文件ELF文件格式最前部ELF文件头,包含了整个文件的基本属性,比如ELF版本,目标机器型号,程序入口地址等。其中ELF文件与段有关的重要结构就是段表。ELF文件格式可重定向文件:包含代码和适当的数据,用来和其他的目标文件一起来创建一个可执行性文件或者是一个共享目标文件可执行文件:保存着一个用来执行的程序共享目标文件:共享库,包含了用于链接的代码和数据,分两种情况:静态连接器...原创 2020-02-28 14:07:33 · 1209 阅读 · 1 评论 -
使用阿里云服务器搭建一道BROP的pwn题
搭建题目环境题目:HCTF2016 bropC代码如下:#include <stdio.h>#include <unistd.h>#include <string.h>int i;int check();int main(void) { setbuf(stdin, NULL); setbuf(stdout, NULL); ...原创 2020-02-26 11:37:21 · 1143 阅读 · 0 评论 -
中级ROP之BROP
Blind ROP基本介绍于2014年提出,论文题目名为Hacking Blind,BROP是指在没有对应应用程序的源代码或者二进制文件的情况下,对程序进行攻击,劫持程序的执行流。攻击条件源程序必须存在栈溢出漏洞,以便于攻击者可以控制程序流程。服务器端的进程在崩溃之后会重新启动,并且重新启动的进程的地址与先前的地址一样,目前nginx,mysql,apache,openssh等服务器应...原创 2020-02-25 12:23:30 · 3388 阅读 · 6 评论 -
中级ROP之ret2reg
ret2reg原理查看栈溢出返回时哪个寄存器指向缓冲区空间。查找对应的call 寄存器或者jmp 寄存器指令,将EIP设置为该指令地址。将寄存器所指向的空间上注入shellcode(确保该空间是可以执行的,通常是栈上的)利用思路分析和调试汇编,查看溢出函数返回时哪个寄存器指向缓冲区地址向寄存器指向的缓冲区中注入shellcode查找call 该寄存器或者jmp 该寄存器指令,...原创 2020-02-23 19:01:51 · 3290 阅读 · 4 评论 -
中级ROP之ret2csu
ret2csu原理在64位程序中,函数的前6个参数是通过寄存器传递的,但是大多数时候,我们很难找到每一个寄存器对应的gadgets。这时候,我们可以利用x64下的__libc_csu_init中的gadgets,如例二情况。这个函数是用来对libc进行初始化操作的,而一般的程序都会调用libc函数,所以这个函数一定会存在。下面是我在IDA摘出来的__libc_csu_init函数的汇编...原创 2020-02-22 18:52:05 · 8197 阅读 · 9 评论 -
Bugku pwn5 WP
下载地址urlchecksec[*] '/mnt/hgfs/ubuntu_share/pwn/bugku/human' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x...原创 2020-02-19 13:02:20 · 957 阅读 · 0 评论 -
Bugku pwn4 WP
下载地址urlchecksec[*] '/mnt/hgfs/ubuntu_share/pwn/wiki/pwn4' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x4...原创 2020-02-18 21:39:47 · 783 阅读 · 0 评论 -
花式栈溢出技巧之stack pivoting
原理正如它描述的,该技巧就是劫持栈指针指向攻击者所能控制的内存处,然后在相应位置进行ROP。一般来说,我们可能在下述情况使用劫持栈指针。可以控制栈溢出的字节数较少,难以构造较长的ROP链。开启了PIE保护,栈地址未知,我们可以将栈劫持到已知的区域。其他漏洞难以利用,需要进行转换,比如将栈劫持到推空间,从而在堆上写rop及进行堆漏洞利用。此外,栈指针劫持有以下几个要求:可以控制程序...原创 2020-02-18 12:04:27 · 1738 阅读 · 1 评论 -
SUS2019迎新赛ret2moonWP
下载地址https://pan.baidu.com/s/1fa2D8ivzYiE9JPVyL3wgXA提取码:dzyu注:不知道什么时候失效checksec+IDA[*] '/mnt/hgfs/ubuntu_share/pwn/wiki/ret2moon' Arch: amd64-64-little RELRO: Partial RELRO St...原创 2020-02-16 13:12:48 · 526 阅读 · 1 评论 -
基本ROP之ret2libc3
ret2libc思路ret2libc就是控制函数的执行libc中的函数,通常是返回至某个函数的 plt 处或者函数的具体位置 (即函数对应的 got 表项的内容)。一般情况下,我们会选择执行 system("/bin/sh"),因此我们通常需要找到 system 函数的地址。ret2libc通常可以分为下面这几类:程序中自身就含有system函数和"/bin/sh"字符串程序中自身就有s...原创 2020-02-15 21:54:20 · 7102 阅读 · 6 评论 -
基本ROP之ret2libc2
原理ret2libc即控制函数执行libc中的函数,通常是返回至某个函数plt表处或者函数的具体位置(即函数对应的got表项的内容),一般情况下我们选择执行system("/bin/sh"),故而我们需要知道system函数的地址过程下载地址:urlchecksecIDA分析gets函数system函数经计算gets字符串和ebp的偏移为108,这里不进行赘述查找bin/s...原创 2020-02-14 23:04:56 · 3836 阅读 · 7 评论 -
pwn学习(格式化字符串漏洞)
格式化字符串函数介绍格式化字符串函数可以接受可变数量的参数,并将第一个参数作为格式化字符串,根据其来解析之后的参数,通俗来说。格式化字符串函数就是将计算机内存中表示的数据转化为我们人类可读的字符串格式。一般来说,格式化字符串在利用时分为三个部分。格式化字符串函数格式化字符串后续参数(可选)Exampleprintf("my name is %s, age is %d.", "das...原创 2020-02-05 13:55:56 · 2054 阅读 · 2 评论 -
PLT表和GOT表学习
GOT表和PLT表在程序中的作用非常巨大,接下来的讲解希望大家可以仔细看看我们用一个非常简单的例子来讲解,代码如下:图1然后我们编译我们直接 gdb./a.out 来进行反编译处理,然后通过disas main查看main函数中的反编译代码如下:图3我们可以观察到 gets@plt 和 puts@plt 这两个函数,为什么后面加了个 @plt ,因为这个为 PLT 表...转载 2020-02-01 18:06:34 · 654 阅读 · 0 评论 -
pwn学习(整数溢出)
整数溢出ctf-wiki基础知识请先浏览上述链接类型字节范围short int2byte0~0x7fff 0x8000~0xffffunsigned short int2byte0~0xffffint4byte0~0x7fffffff 0x80000000~0xffffffffunsigned int4byte0~0xffffffff...原创 2020-01-31 14:32:59 · 3399 阅读 · 0 评论 -
Canary学习(爆破Canary)
one-by-one 爆破Canary原理对于Canary,虽然每次进程重启后Canary不同,但是同一个进程中的不同线程的Cannary是相同的,并且通过fork函数创建的子进程中的canary也是相同的,因为fork函数会直接拷贝父进程的内存。最低位为0x00,之后逐次爆破,如果canary爆破不成功,则程序崩溃;爆破成功则程序进行下面的逻辑。由此可判断爆破是否成功。我们可以利用这样的...原创 2020-01-30 22:15:19 · 4571 阅读 · 0 评论 -
Canary学习(泄露Canary)
canary原理通常栈溢出的利用方式是通过溢出存在于栈上的局部变量,从而让多出来的数据覆盖ebp,eip等,从而达到劫持控制流的目的。栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址让shellcode执行。当启用栈保护时,函数开始执行的时候会先往栈底插入cookie信息,如果不合法就停止程序运行(栈溢出发生)。攻击者在覆盖返回地址的时候...原创 2020-01-30 14:48:51 · 6232 阅读 · 0 评论 -
基本ROP之ret2syscall
原理控制程序执行系统调用过程下载链接查看程序保护checksec ropIDA查找危险函数计算偏移老方法计算偏移(gdb设置断点)上篇博客有,可以自行查找计算偏移为6C,十进制是108,加4之后是112利用系统调用简单地说,只要我们把对应获取 shell 的系统调用的参数放到对应的寄存器中,那么我们在执行 int 0x80 就可执行对应的系统调用。比如说这里我们利用...原创 2020-01-13 21:12:00 · 813 阅读 · 0 评论 -
基本ROP之ret2shellcode
原理控制程序执行shellcode代码shellcode指的是用于完成某个功能的汇编代码,常见的功能主要是获取目标系统的shell。一般来说,shellcode需要我们自己进行填充,这其实是一种典型的利用方法。执行条件:对应二进制在执行时,shellcode所在区域需要可执行的权限。过程下载地址查看程序保护机制毫无保护IDA看下汇编指令发现gets危险函数同时还有...原创 2020-01-12 23:13:47 · 1743 阅读 · 0 评论 -
基本ROP之ret2text
(IDA分析存在错误,抠了一天终于在大佬的帮助下抠出来了)背景当程序开启NX保护之后,直接向栈或堆上注入代码的方式难以发挥效果(数据页不执行操作)提出绕过操作: ROP(Return Oriented Programming)主要思想是:在栈缓冲区溢出的基础上,利用程序中已有的小片段(gadgets),来改变寄存器或者变量的值,从而控制程序的执行流程。所谓 gadgets 就是以 ret...原创 2020-01-12 17:01:52 · 1442 阅读 · 0 评论 -
linux程序的常用保护机制
操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险,包括DEP、ASLR等。在编写漏洞利用代码的时候,需要特别注意目标进程是否开启了DEP(Linux下对应NX)、ASLR(Linux下对应PIE)等机制,例如存在DEP(NX)的话就不能直接执行栈上的数据,存在ASLR的话各个系统调用的地址就是随机化的。一、checksecchecksec是一个脚本软件,也就是用脚本写...转载 2020-01-12 00:06:44 · 828 阅读 · 0 评论