- 博客(317)
- 收藏
- 关注
原创 更换glibc版本
文章目录更换glibc版本1.下载glibc2.下载patchelf3.更换glibc4.备注更换glibc版本因为pwn学习堆的知识点的时候需要使用到glibc2.23的环境,但是我的ubuntu20.04的glibc是2.31,所以需要更换到低版本的glibc1.下载glibc在github上下载glibc-all-in-one项目:$ git clone https://github.com/matrix1001/glibc-all-in-one.git进入目录,然后运行update
2021-11-13 17:57:50
7685
3
原创 ctf堆溢出
文章目录堆溢出1.介绍2.示例3.小结3.1 寻找堆分配函数3.1.1 malloc3.1.2 calloc3.1.3 relloc3.2 寻找危险函数函数3.3 确定填充长度堆溢出1.介绍堆溢出指的是程序向某个堆块中写入的字节数超过了堆块本身可使用的字节数(堆块本身可使用的字节数>用户申请的字节数),因此导致了溢出,并覆盖到物理相邻的高地址的下一个堆块。原理和栈溢出基本一样,不过堆溢出很难像栈溢出一样直接控制程序指向流程。一般堆溢出的策略为:覆盖与其物理相邻的下一个chunk内容。
2021-11-01 12:56:06
1150
原创 堆相关数据结构
文章目录堆相关数据结构1.微观结构1.1 malloc_chunk1.1.1 chunk定义1.1.2 使用中的chunk1.1.3 空闲的chunk(被free后)1.2 bin1.2.1 概述1.2.2 fast bin1.2.3 small bin1.2.4 large bin1.2.5 unsorted bin1.3 Top chunk1.4 last remainder2.宏观结构2.1 arena2.2 heap_info2.3 malloc_state堆相关数据结构参考:https://
2021-10-31 19:19:05
541
原创 ctf堆概述
文章目录堆概述1.堆概述1.1 堆1.2 堆管理器1.3 概念示图2.堆的基本操作2.1 申请内存malloc2.2 释放内存free2.3 内存分配背后的系统调用2.3.1 brk2.3.2 mmap2.4 多线程支持堆概述参考:https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/heap-overview/1.堆概述1.1 堆在程序运行过程中,堆可以提供动态分配的内存,允许程序申请大小未知的内存。堆其实就是程序虚拟地址空间的一块连续的
2021-10-30 16:29:10
373
原创 格式化字符串
文章目录格式化字符串1.原理1.1 格式化字符串介绍1.1.1 格式化字符串函数1.1.2 格式化字符串1.1.3 参数1.2 32位格式化字符串漏洞基本原理1.3 32位格式化字符串利用思路1.3.1 利用1:程序崩溃1.3.2 利用2:泄露内存1.3.2.1 泄露栈内存1.3.2.1.1 获取栈变量数值1.3.2.1.2 获取栈变量对应字符串1.3.2.2 泄露任意地址内存1.3.3 利用3:覆盖内存1.3.3.1 覆盖栈内存1.3.3.2 覆盖任意地址内存1.3.3.2.1 覆盖为小数字1.3.3.3
2021-10-29 22:46:02
853
原创 花式栈溢出
文章目录花式栈溢出1.原理1.1 stack pivoting1.2 栈迁移(frame faking)1.2.1 gadget介绍1.2.2 栈(payload)布置1.2.3 步骤分析stage 1:stage 2:stage 3:stage 4:stage 5:stage 6:其他栈迁移方式:1.3 Stack smash1.4 partial overwrite2.例题2.1 stack pivoting2.1.1 习题信息2.1.2 程序分析2.2 栈迁移(frame faking)2.2.1 习
2021-10-04 13:22:30
806
原创 大端序和小端序
文章目录大端序和小端序大端序和小端序1、大端模式:高字节保存在内存的低地址2、小端模式:高字节保存在内存的高地址(高对高,低对低)举例:var = 0x11223344,对于这个变量的最高字节为0x11,最低字节为0x44(1)大端模式存储(存储地址为16位)地址 数据0x0004(高地址) 0x440x0003 0x330x0002 0x220x0001(低地址) 0
2021-10-01 17:31:56
1485
原创 高级ROP
文章目录高级ROP1.原理1.1 ret2_dl_runtime_resolve1.1.1 _dl_runtime_resolve()函数机制介绍1.1.2 利用思路1.1.2.1 思路 1:直接控制重定位表项的相关内容1.1.2.2 思路 2 - 间接控制重定位表项的相关内容1.1.2.3 思路 3 - 伪造 link_map1.2 SROP1.2.1 signal机制1.2.2 攻击原理1.2.3 相关工具介绍1.3 ret2VDSO1.3.1 概述1.3.2 vdso.so内函数和gadget1.3.
2021-10-01 17:30:45
1427
原创 pwn常用函数
文章目录pwn常用函数1.输入输出类1.1 write()函数1.2 read()函数1.3 scanf()函数1.4 fputs()函数1.5 fgets()函数1.6 puts()函数1.7 gets()函数2.转换类2.1 atoi()函数2.2 strtoul()函数3.过滤类3.1 seccomp()函数4.执行类4.1 execve()函数4.2 system()函数pwn常用函数1.输入输出类1.1 write()函数**函数原型:**ssize_t write(int fd, con
2021-09-23 23:38:52
1245
原创 中级ROP
文章目录中级ROP1.原理1.1 ret2csu1.1.1 libc_csu_init展示1.1.2 可用gadget介绍1.1.3 组合使用gadget思路1.1.4 类似于libc_csu_init,其他可用的gadget1.1.5 利用libc_csu_init尾部偏移,控制其他寄存器1.2 ret2reg1.2.1 原理1.2.2 防御方法1.3 BROP1.3.1 概念1.3.2 攻击条件1.3.3 攻击原理1.3.3.1 栈溢出长度1.3.3.2 Stack Reading1.3.3.3 Bli
2021-09-23 23:07:02
549
原创 系统调用号
文章目录系统调用号1.系统调用号路径2.i3863.ILP324.x64系统调用号1.系统调用号路径环境:Ubuntu-20.04路径:/usr/include/asm/unistd.h/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */#ifndef _ASM_X86_UNISTD_H#define _ASM_X86_UNISTD_H/* * x32 syscall flag bit. Some user pro
2021-09-20 17:43:34
1124
原创 exp编写小技巧
文章目录exp编写小技巧1.代码对齐2. 填充为指定长度3. 链接远程服务器或者链接本地文件4. 格式转换5. 环境变量6. 获得汇编指令的机器代码7. 把权限交给用户8. shellcode9. ELF 操作ELF文件的工具11.接收数据12.发送数据13.填充字符,字符串向右/向左填充14.寻找ROP15.使用flat()函数来格式化payload16.gdb调试exp17.泄露libc常用函数18.获取libc版本方法19.寻找文件中字符串20.栈溢出确定偏移量方法20.1 方法一:gdb手工计算20
2021-09-20 17:38:15
2988
原创 ELF文件结构
文章目录ELF文件结构1.磁盘中的elf文件1.1 宏观结构展示1.2 ELF header解释1.2.1 字段定义1.2.2 不同字段详细解释1.2.3 readelf读取elf头部1.3 section header table解释1.4 program header table解释1.5 section header table和program header table的关系2.内存中的elf文件ELF文件结构博客参考:https://segmentfault.com/a/119000001676
2021-09-20 17:35:33
377
原创 源代码到可执行文件的生成过程
文章目录源代码到可执行文件的生成过程1.流程2.示例2.1 C源代码:(test.c )2.2 汇编代码:(test.s)2.3 机器码:(test.o)2.4 可执行文件(a.out)源代码到可执行文件的生成过程1.流程•编译:由C语言代码生成汇编代码•汇编:由汇编代码生成机器码•链接:将多个机器码的目标文件链接成一个可执行文件2.示例2.1 C源代码:(test.c )#include <stdio.h>int main() { printf("hellod worl
2021-09-20 17:34:48
815
原创 习题--pwn3
文章目录pwn31.程序分析2.栈帧设计3.exp编写pwn31.程序分析首先file一下,发现是32位程序:checksec一下,发现pie没开:ldd一下,找到使用的动态链接库:ida分析,发现存在函数vulnerable_function(),可以用来栈溢出题目给出了一个.so文件,那么只需要泄露got表内容,就可以得到system()函数的真实地址。bin_sh字符串也可以到libc里面寻找。发现write()函数在read()函数前被调用,因此可以使用write()将writ
2021-09-20 17:32:47
1146
原创 pwn3_x64
文章目录pwn3_x641.程序分析2.栈帧设计3.exp编写pwn3_x641.程序分析file一下,发现是64位程序:checksec一下,发现pie没开:ldd一下,找到需要的动态链接库:ida分析:思路和上一题32位的一样,没啥好分析的64位与32的不同在于传参:当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9因此需要ROP链找到rdi, rsi, rdx。用ROPgadget查看下:发现有现成的pop rdi; ret
2021-09-18 23:37:58
253
原创 习题-pwn2
文章目录pwn21.程序分析2.栈帧设计3.exp编写pwn21.程序分析首先file一下,发现是32位程序:checksec一下,发现pie关闭:ida分析程序,发现存在system函数,因此可以到plt内找到system:分析vulnerable_function(),可以得到需要溢出的长度为0x88 + 4 =136+4 = 140,同时存在read(),可以用来溢出[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3YpmnStC-1631942444
2021-09-18 13:20:57
175
原创 pwn2_64
文章目录pwn2_641.程序分析2.栈帧设计3.exp编写pwn2_641.程序分析本题和上一题一样,但是是64位的,那么就需要改变传参的方式:当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9那么就需要使用rop先把需要的参数“/bin/sh”传入rdi。2.栈帧设计3.exp编写from pwn import *context(log_level = 'debug', arch = 'amd64', os = 'linux')io
2021-09-18 13:20:35
143
原创 习题--pwn1
文章目录pwn11.程序分析2.栈帧设计3.exp编写pwn11.程序分析首先file一下,发现是32位程序:checksec一下,发现栈段可以执行:ida分析,main函数内部调用了vulnerable_function(),可以用来栈溢出:同时发现上面的printh可以用来泄露buf的地址,因此可以将shellcode填上buf处,然后根据泄露的地址再跳回来执行shellcode程序一下,可以查看到泄露的buf地址:gdb调试发现需要淹没的长度为:0xffffd2d8−0xfff
2021-09-18 13:03:25
173
原创 习题-pwn0
文章目录pwn01.程序分析2.栈帧设计3.exp编写pwn01.程序分析首先file一下,发现是64位程序:checksec一下,发现没有pieida分析:存在read函数,可以栈溢出利用。同时,发现存在callsystem()函数,可以直接获取shell:这就和ret2text一样了。gdb计算需要覆盖的长度为60。但是因为本机环境是ubuntu20.04,64位程序的system("/bin/sh")需要堆栈平衡因此加上一个ret:0x00000000004005A5
2021-09-18 13:02:39
223
原创 fmtstr1
文章目录fmtstr11.程序分析2.exp编写fmtstr11.程序分析file一下:checksec一下:ida分析一下,发现存在printf(&buf),这里有格式化字符串漏洞,可以进行利用发现如果x是4的话,就能够获取到shell,但是在数据段内x的值为3:因此,需要利用格式化字符串利用,将x的值从3修改为4。使用gdb进行调试,在printf处设置断点。输入"%d%d", 当进入printf(&buf)时,查看栈内变量,发现"%d%d"是格式化字符串的第1
2021-09-18 13:02:04
283
原创 ret2text
文章目录ret2text1.检查保护机制2.ida分析程序3.exp编写ret2text进程存在危险函数如system(“/bin”)或execv(“/bin/sh”,0,0)的片段,可以直接劫持返回地址到目标函数地址上,从而获取shell。1.检查保护机制首先调用checksec,检查保护机制:发现pie没有开启2.ida分析程序使用ida打开程序ret2text,静态分析:发现main函数中存在函数:vulnerable(),里面有危险函数gets(),可以用来进行栈溢出发现
2021-09-18 13:00:52
297
原创 ret2syscall
文章目录ret2syscall1.原理2.构造过程3.expret2syscallret2syscall: 控制程序执行系统调用,获取 shell1.原理系统调用参考博客:https://blog.youkuaiyun.com/qq_33948522/article/details/938808122.构造过程使用ida分析程序,发现存在gets()函数,可以用来进行栈溢出:使用shift+F12查看字符串,发现存在"/bin/sh"字符串,位于0x080BE408处:基于rop链构造思路,需
2021-09-18 13:00:16
353
转载 转载-ubuntu20.04 pwn(x86、arm、mips)环境搭建
文章目录转载-ubuntu20.04 pwn(x86、arm、mips)环境搭建1.虚拟机安装2. vim3.git4.gcc5.python3-pip6.python-is-python37.qemu8.gdb-multiarch9.PWN工具9.1 pwntools9.2 pwndbg、peda、gef9.3 ROPgadget9.4 one_gadget9.5 seccomp-tools9.6 LibcSearcher9.7 patchelf10. ARM PWN11.MIPS PWN转载-ubun
2021-08-23 00:05:47
1448
1
原创 x86、x64栈结构图示
文章目录x86、x64栈结构图示1. x86栈结构图示2. x64栈结构图示x86、x64栈结构图示1. x86栈结构图示[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zqloONwc-1629648303940)(https://i.loli.net/2021/08/19/thRPXsiWA5a1gE9.png)]2. x64栈结构图示基本和x86下一样,但是传参方式发生改变:在64位程序中,函数的前6各参数是通过寄存器传递的:rdi作为第一个参数rsi作为
2021-08-23 00:05:11
1375
原创 ret2shellcode
文章目录ret2shellcode1.保护机制2.ida分析3.exp编写ret2shellcodeshellcode:在栈溢出的攻击技术中通常是要控制函数的返回地址到自己想要的地方执行自己想要执行的代码。ret2shellcode代表返回到shellcode中即控制函数的返回地址到预先设定好的shellcode区域中去执行shellcode代码,这是非常危险的。1.保护机制[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4UzJhYXX-1628871725391
2021-08-14 00:22:12
207
原创 exp编写小技巧
文章目录exp编写小技巧1.代码对齐2. 填充为指定长度3. 链接远程服务器或者链接本地文件4. 格式转换5. 环境变量6. 获得汇编指令的机器代码7. 把权限交给用户8. shellcode9. ELF 操作ELF文件的工具11.接收数据12.发送数据13.填充字符,字符串向右/向左填充14.寻找ROP15.使用flat()函数来格式化payloadexp编写小技巧1.代码对齐exp中填写地址时要注意代码长度的填充2. 填充为指定长度3. 链接远程服务器或者链接本地文件# 远程r = rem
2021-08-14 00:21:12
894
原创 转载-栈的保护机制
文章目录转载-栈的保护机制一、CANNARY(栈溢出保护)二、FORTIFY三、NX(DEP)四、PIE(ASLR)五、RELRO转载-栈的保护机制一、CANNARY(栈溢出保护)栈溢出保护是一种用缓冲区溢出攻击环节手段,当函数存在缓冲区溢出漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行。当启用栈保护后,函数开始执行的时候就会向往栈里插入cookie信息,当函数真正返回的时候回验证cookie信息是否合法,若果不合法就会停止程序运行。攻击者在覆盖返回地址的时候往往也会将cook
2021-08-14 00:19:49
506
原创 基本ROP
文章目录基本ROP1.原理1.1 概念原理1.2 分类1.2.1 ret2text1.2.2 ret2shellcode1.2.3 ret2syscall2.例题2.1 ret2text2.1.1 习题信息2.1.2 程序分析2.1.3 漏洞定位2.1.4 漏洞利用2.1.4.1 方法一:gdb手工计算2.1.4.2 方法二:cyclic工具测算2.1.4.3 方法三:ida直接查看(不一定正确)2.1.5 exp编写2.2 retshellcode2.2.1 习题信息2.2.2 程序分析2.2.3 漏洞定
2021-08-14 00:18:25
946
原创 AtCoder Beginner Contest 210
文章目录AtCoder Beginner Contest 210A - CabbagesB - Bouzu MekuriC - Colorful CandiesD - National RailwayE - Ring MSTAtCoder Beginner Contest 210A - Cabbages题意:题解:代码:#include <bits/stdc++.h>#define int long long#define debug(x) cout << #x &
2021-08-10 18:46:11
154
原创 ret2libc3
文章目录ret2libc31.程序分析2.栈帧设计3.exp编写ret2libc3当前的ret2libc3:无system,无”\bin\sh“1.程序分析首先file一下,发现是32位程序:checksec一下,发现没有开启pieida分析程序:发现有个See_something()函数可以用来泄露具体给定地址内的信息:main函数内还有个Print_message(),可以用来栈溢出:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SKJoX7
2021-08-06 20:04:42
461
原创 ret2libc2
文章目录ret2libc21.程序分析2.栈帧构造2.1 第一种构造方式2.2 第二种构造方式3.exp编写ret2libc2当前的ret2libc2:有system,无”\bin\sh“1.程序分析找个题和ret2libc1差不多,区别在于程序里面没有现成的"/bin/sh"字符串。首先checksec一下:file一下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ss8LRj6L-1628251397723)(https://i.loli.net/2
2021-08-06 20:03:38
251
原创 ret2libc1
文章目录ret2libc11.简单机制介绍2.程序分析3.exp编写ret2libc11.简单机制介绍ret2libc即控制程序执行libc中的函数,一般是返回至某个plt处或者函数的具体的位置(比如got表项的内容)。一般,我们选择跳转到system("/bin/sh")位置,从而获取shell。当程序调用某个函数时,程序会去plt表内查找,plt表再去got内查找,如果got内存在那么直接返回;如果不存在那么就调用查找函数搜寻需要用到的函数,然后存入got表内。当前的ret2libc1:有sy
2021-08-06 20:03:08
346
原创 uaf-lab 10 hacknote
文章目录uaf-lab 10 hacknote1.程序分析2.设计思路3.exp编写uaf-lab 10 hacknote1.程序分析分析程序,发现程序是由几个部分组成:Add note、Delete note、 Print note,另外发现了magic函数[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ycbqU3Az-1628251301262)(https://i.loli.net/2021/07/23/R1mvnwpc4h7sF6f.png)]下面对4个部分
2021-08-06 20:01:50
206
原创 AtCoder Beginner Contest 209
文章目录AtCoder Beginner Contest 209A - CountingB - Can you buy them all?C - Not EqualD - CollisionE - ShiritoriF - DeforestationAtCoder Beginner Contest 209A - Counting题意:题解:代码:#include <bits/stdc++.h>#define int long long#define debug(x) cout
2021-08-06 15:52:54
300
1
原创 AtCoder Beginner Contest 208
文章目录AtCoder Beginner Contest 208A - Rolling DiceB - Factorial Yen CoinC - Fair Candy DistributionD - Shortest Path Queries 2E - Digit ProductsF - Cumulative SumAtCoder Beginner Contest 208A - Rolling Dice题意:题解:代码:#include <bits/stdc++.h>#defi
2021-08-05 19:19:28
364
原创 AtCoder Beginner Contest 207
文章目录AtCoder Beginner Contest 207A - RepressionB - HydrateC - Many SegmentsD - Congruence PointsE - Mod iAtCoder Beginner Contest 207A - Repression题意:题解:代码:#include <bits/stdc++.h>#define int long long#define debug(x) cout << #x <<
2021-08-01 21:35:19
342
1
原创 可持续化数组
文章目录可持续化数组1.算法分析3.典型例题可持续化数组1.算法分析3.典型例题P3919 【模板】可持久化线段树 1(可持久化数组)题意: 如题,你需要维护这样的一个长度为 N 的数组,支持如下几种操作在某个历史版本上修改某一个位置上的值: vi 1 loci valueiv_i\ 1\ loc_i\ value_ivi 1 loci valuei, 即为在版本viv_ivi的基础上,将 alocia_{{loc}_i}a
2021-07-23 14:14:14
139
原创 分块与块状链表
文章目录分块与块状链表1. 算法分析1.1 分块思想1.2 块状链表2. 板子2.1 分块2.2 块状链表3. 例题2.1 分块2.2 块状链表分块与块状链表1. 算法分析1.1 分块思想分块思想就是将整体分为n\sqrt nn个长度为n\sqrt nn的区间,这样区间修改和查询的复杂度从O(n)O(n)O(n)降为了O(n)O(\sqrt n)O(n)维护两个数组:add代表本段中的所有数都要加上add,sum代表本段的真实和是多少(算上了add)修改一个区间时,分为完整段的区间修改以及
2021-07-23 14:13:40
576
原创 堆数据结构小结
文章目录堆1.算法分析2.模板3.典型例题堆1.算法分析down(x)函数:从x开始往下使用筛选法调整堆,up(x)函数:从x开始往上使用筛选法调整堆堆的基本操作(以小根堆为例):1.插入一个数: heap[++size] = x; up(size)2.求集合当中的最小值:heap[1]3.删除最小值:heap[1] = heap[size];size–;down(1)4.删除任意一个元素:heap[k] = heap[size];size–;down(k) or up(k) (比原位置的数
2021-07-23 14:11:57
205
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人