avatar
文章
20
标签
21
分类
8
Home
Archives
Tags
Categories
Link
XiDP
搜索
Home
Archives
Tags
Categories
Link

XiDP

非栈上格式化字符串的利用方法
发表于2025-06-13|PwnWriteup
前言本文以第六届强网拟态线下赛的格式化字符串Pwn题为例,分享非栈上格式化字符串的利用方法。主要涵盖两个关键技术点: 多级指针链利用:当格式化字符串不在栈上时,通过修改栈上现有的多级指针链(二重/三重指针)来间接控制目标内存 高位截断技术:当前期输出字符数已超过后期需求值时,利用0x10000溢出特性实现单字节精确写入 同时探讨为何不能在同一条指针链上使用 $ 符号进行连续修改的问题,并提出个人结论(如有错误希望师傅们指出)。 通过网盘分享的文件:第六届强网拟态fmt.rar链接: https://pan.baidu.com/s/19-fAYm0DuEhkSO7SzlJLAg?pwd=xidp 提取码: xidp 第六届强网拟态线下赛的格式化字符串 程序逻辑很简单,白给一个stack的地址,然后给一个非栈上格式化字符串的机会,最后没办法控制main函数的返回地址,因为是直接使用exit退出 显而易见的我们遇到了两个问题: 首先我们的 buf 不在栈上,没办法随意在栈中写入我们想要的地址然后去修改 其次我们只有一次机会 首先来看看如果是 非栈上的格式化字符串...
C程序调用过程与函数栈变化(32位 vs 64位)(Intel)
发表于2024-06-13|Pwn基础知识
本文使用Intel 的32位为例子进行举例。64位本质上和32位类似,主要区别在于函数参数的调用方式,文章结尾会简要提及。 重新回顾一下栈pop和push指令 12// 将0x50的压入栈push 0x50 1234// 将esp指向的数据放入指定的寄存器中pop 寄存器名字比如 :pop eax执行之后eax的值就变成了0x50 栈帧是什么?栈帧,也就是stack frame,其本质就是一种栈,只是这种栈专门用于保存函数调用过程中的各种信息(参数,返回地址,本地变量等)。栈帧有栈顶和栈底之分,其中栈顶的地址最低,栈底的地址最高,SP(栈指针)就是一直指向栈顶的。在x86-32bit中,我们用 ebp 指向栈底,也就是基址指针;用 esp 指向栈顶,也就是栈指针。下面是一个栈帧的示意图: 1234567891011// 这是一段有问题的C语言代码,仅仅只是用作C语言函数调用流程的介绍,为了方便读者理解#include <stdio.h>void func(参数1, 参数2 ,参数3 ) { }int main() { ...
ELF 文件格式和程序段解析(简版)
发表于2024-06-13|Pwn基础知识
ELF (Executable and Linkable Format): 是一种用于 可执行文件、目标文件 和 库 的文件格式,类似于 Windows 下的 PE 文件格式。 ELF 主要包括三种类型的文件: 可重定位文件 (relocatable): 编译器和汇编器产生的 .o 文件,由 Linker 处理。 可执行文件 (executable): Linker 对 .o 文件进行处理后输出的文件,代表进程映像。 共享对象文件 (shared object): 动态库文件,通常是 .so 文件。 ELF 文件包含多个段,每个段承担不同的作用。以下是一些入门级 PWN 可能需要用到的段(仅介绍这些基本段): .text: 用于保存程序中的代码片段。 .data: 用于保存已经初始化的全局变量和局部变量。 .bss: 用于保存未初始化的全局变量和局部变量。 .plt: 用于链接和跳转到对应的 .got 表。 .got.plt: 存储对应函数的真实地址的表。 .rodata: 只读数据 .init: 程序初始化和终止的代码 ELF...
Linux基础操作和ELF文件保护
发表于2024-06-13|Pwn基础知识
基础Linux指令 查看当前目录: pwd:打印当前工作目录路径。 列出目录内容: ls:列出当前目录的文件和文件夹。 ls -l:显示详细信息。 ls -a:显示所有文件,包括隐藏文件。 切换目录: cd 目录名:进入指定目录。 cd ..:返回上级目录。 创建文件和目录: touch 文件名:创建空文件。 mkdir 目录名:创建新目录。 删除文件和目录: rm 文件名:删除文件。 rm -r 目录名:递归删除目录及其内容。 移动和重命名文件: mv 源文件 目标:移动或重命名文件或目录。 复制文件和目录: cp 源文件 目标:复制文件。 cp -r 源目录 目标:递归复制目录。 查看文件内容: cat 文件名:显示文件内容。 less 文件名:分页查看文件内容,适合查看长文件。 编辑文件: nano 文件名 或 vim 文件名:使用nano或vim编辑文件。 查找文件: find /路径 -name 文件名:在指定路径下查找文件。 显示系统信息: uname...
Pwndbg基础使用
发表于2024-06-13|Pwn基础知识Tools
什么是pwndbg?它是gdb的一个插件,增加了许多功能,来帮助pwn手可以快速寻找到所需要的信息,除了pwndbg之外还有peda、gef等工具可以用来协助进行调试。 如何给pwndbg分屏?12vim ~/.gdbinitset context-output /dev/pts/2 # 这里修改成2,那么就会在第二个终端显示信息 pwndbg的基础操作:启动调试: 12gdb ./文件名比如:gdb ./pwn 如果我们已经成功安装了pwndbg,那么打开gdb之后会显示pwndbg>这样的提示符号,否则是gdb> 基础操作: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576**************************************************pwndbg> start #...
pwntools库的基本使用
发表于2024-06-13|Pwn基础知识Tools
啥是pwntools?Pwntools 是一个用于漏洞利用和二进制分析的 Python 库,广泛应用于安全研究、渗透测试和竞争性编程(如 CTF,Capture The Flag)中。它为用户提供了一套强大的工具和功能,以简化与二进制文件的交互、网络通信以及各种常见任务的执行。 简而言之,pwntools可以说是pwn手必备的工具,它帮助pwn手连接远程服务器,发送信息,接收信息,以及提供了很多工具来帮助pwn手快速攻克题目 如何安装pwntools?按照以下流程在python3中安装pwntools 1234>>>git clone https://github.com/Gallopsled/pwntools.git>>>sudo apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential>>>python3 -m pip install --upgrade pip>>>python3...
不同输入函数之间的区别
发表于2024-06-13|Pwn基础知识杂
前言本文涉及 read函数 fgets函数 scanf函数 以及 gets函数 获取字符串后内存的区别,以及在pwntools中使用 sendline 和 send 的区别。实验过程有些冗长,嫌麻烦的师傅可以直接查看下面的总结 实验目标 read fgets scanf 这种可以限定大小的输入,如果输入量小于/等于/大于它们的输入量分别会出现什么情况 scanf("%s",&buf)这种情况是否存在溢出 gets 输入是怎么处理\n符号的 下面是我实验用的代码 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293#include <stdio.h>#include <stdlib.h>#include...
如何搜索下载libc以及其对应的ld文件
发表于2024-06-13|Pwn杂
查找网站推荐使用下面的网址https://launchpad.net/ubuntu/focal/amd64/libc6网站页面如下: 如何搜索我们需要使用URL来直接进行版本的搜索https://launchpad.net/ubuntu/版本/amd64/libc6我们只需要修改上面的 版本 就可以替换对不同版本的libc进行查找下面是不同的版本名称也就是我们分别将 版本 修改为 :plucky oracular noble 等就可以查到对应的Ubuntu版本所使用的历史libc版本 下面使用 Ubuntu20 版本来举例比如我们想要找一个glibc版本为2.31的glibc那么2.31的glibc应该是对应的Ubuntu20版本那么我们就将版本修改为 focal 也就是URL修改为(注意这里focal必须全部小写)https://launchpad.net/ubuntu/focal/amd64/libc6 然后就会看到不同的glibc版本,选择我们需要的版本,点击进入 这里我们使用 2.31-0ubuntu9.15...
汇编语言基础与堆栈入门
发表于2024-06-13|Pwn基础知识
啥是汇编语言?有啥用?深入了解计算机底层,我们会发现,计算机实际上只能执行一些非常基础的操作,但其速度却非常快。计算机的CPU只能执行机器码,即由一系列0和1组成的指令。不同的0和1组合会触发计算机中的不同电路,从而进行各种操作。由于这些0和1的组合很长,阅读起来不方便,因此通常以16进制形式显示。然而,即便如此,16进制的表示仍然难以理解。为了简化这一过程,汇编语言应运而生,它用更易读的符号来表示这些机器指令,从而使程序员能够更方便地编写和理解代码。 啥是寄存器?计算机中的所有指令都是由CPU执行的。在计算机结构中,CPU和内存是分开的,而寄存器则位于CPU内部。CPU可以直接访问寄存器中的数据来执行各种指令操作。在程序执行过程中,数据通常从内存 –> 缓存(cache)–>...
PWN入门手册
发表于2024-06-12|Pwn基础知识
什么是 PWN?PWN 是黑客术语中的俚语,是指攻破设备或者系统。它的发音类似于“砰”,当然也有师傅把它叫作“胖”。PWN 的目标是获取系统的控制权或执行未经授权的操作。 如何入门 PWN前置知识 C 语言 学习内容: 程序结构和基础语法 数据类型、分支语句(如 if、switch)和循环(如 for、while) 指针和结构体 学习资源: 浙江大学翁恺教你 C 语言程序设计 C 语言教程 | 菜鸟教程 Python 语言 学习内容: 程序结构和基础语法 循环(for、while)和异常处理(如 try) 学习资源: Python3 教程 | 菜鸟教程 超基础 Python 课程 建议:掌握 C 语言后,可以直接用文章进行 Python 的学习,进度会更快。 汇编语言 常见类型: x86 汇编:Intel 和 AMD 的处理器架构 ARM 汇编:用于移动设备 MIPS 汇编:用于嵌入式系统 PowerPC 汇编:曾用于苹果计算机 RISC-V...
12
avatar
XiDP
文章
20
标签
21
分类
8
Follow Me
公告
So get away
最新文章
qemu搭建ARM64环境2025-07-14
IOT入门--路由器命令执行漏洞2025-07-13
CVE-2017-17215 华为HG532路由器RCE漏洞复现2025-07-12
DIR-815 栈溢出漏洞(CNVD-2013-11625)复现2025-06-14
2025 ISCC 擂台赛Pwn-wp(含附件)2025-06-13
分类
  • CVE复现4
  • IOT5
  • Pwn15
  • Tools3
  • Writeup6
  • ret2系列1
  • 基础知识8
  • 杂2
标签
fgets qemu 路由器 Pwn read Linux Writeup ret2X Tools IOT 格式化字符串 ARM C语言 scanf CTF 远程命令执行 libc ELF 汇编 gets CVE
归档
  • 七月 2025 3
  • 六月 2025 8
  • 六月 2024 9
Let yourself go
搜索
数据加载中