Containers.md
发表于|更新于|notes
|浏览量:
文章作者: HaoIne
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 HaoIne!
相关推荐
2025-03-24
call_stack
IA-32 (Intel 32位) 寄存器Note: 32 位说明栈中指针偏移量以 32位(4字节)为一个基元。 EAX ~ EDX: 通用寄存器 (general purpose registers), 通用寄存器是通用的,但是有一部分指令对寄存器有特殊要求,这时它们分别有如下用途: EAX: 累加器 (“A” means Accumulator) EBX: 数据基地址暂存器 (“B” means Base) ECX: 循环计数器 (“C” means Counter) EDX: 操作数或操作结果暂存器 (“D” means Data) 为了方便存储较短的数据,通用寄存器都可以只使用低16位 ESI 和 EDI: 这两个寄存器优势也被包括在通用寄存器内,但是不能拆分,一般用作字符串操作的源指针和目的指针。 ESP 和 EBP: ESP 存储的是栈顶地址,即栈指针 (Stack Pointer),而 EBP 存储的是位于栈顶的栈帧的栈底地址,即基指针 (Base Pointer) 控制权移交 控制权是指 CPU...
2025-04-06
Compile
编译是将源代码变成可执行程序的过程,这个过程可以分为以下步骤: 预处理 编译 汇编 链接 下面以gcc为例解释每个阶段 预处理阶段 预处理阶段主要是处理源代码中以’#’开始的预处理指令,将其转换后直接插入程序文本中,得到另一个C源码,通常以”.i”作为文件扩展名。 例如此时有一个文件 hello.c: 12345#include <stdio.h>int main(void) { printf("hello world"); return 0;} 预处理命令: 1$ gcc -E hello.c -o hello.i 简单来说预处理阶段的一些处理规则如下: 递归处理 #include 命令,将对应文件的内容复制到该指令所在的位置 删除所有的 #define 命令,并替换为对应的宏 处理所有的条件预处理指令,比如” #if, #ifdef, #endif...
2025-04-06
Linking
什么是链接呢?链接就是把多个目标文件、库文件组合成一个可执行文件(或共享库、静态库)的过程。链接分为两类: 静态链接:直接把库代码复制进可执行文件 动态链接:程序运行的时候加载共享库 链接时主要解决的问题: 符号解析 (Symbol Resolution) 地址和段重定位 (Relocation)
2025-03-31
Sequence
I’m learning the CS_61A course since January 2024, but there was a long time I suspended the learning of this course to learn some other subjects like Algorithm and Data Structure, and pwn in CTF. And now it’s time to continue the learning. Sequences are a list of Data in a specific order such as queues, arrays and linked lists. ListWe should know that Python does not have a built-in array type (like C arrays) that’s available without importing a module. But there is a list type in...
2025-03-29
ret2shellcode.md
After learning ret2text, here comes the ret2shellcode.ret2text的前提是程序中包含了系统调用shell的代码,只要直接覆盖返回地址到敏感代码就可以直接getshell了,但是实际上基本没有什么程序会包含这样的敏感代码,而这时候就需要自己去构造敏感代码了。 前提 程序中存在栈溢出漏洞,没有开启canary保护,并且溢出大小合适,能够让我们注入shellcode并覆盖返回地址。 由于我们要向程序中注入shellcode并且执行,所以要求程序中包含可读可写可执行的片段,比如没有开启NX (No eXecutable)保护的栈帧片段。 Implementation (只介绍在栈帧中注入shellcode的情况)准备shellcode最简单的shellcode就是execve('/bin/sh', NULL,...
2025-03-29
ret2text.md
参考网站:CTF Wiki ret2text 是最简单的利用栈溢出漏洞来getshell的方法,这种方法就是利用程序中已经有的敏感命令比如system('/bin/sh')来getshell 前提 程序存在栈溢出,并且溢出大小合适,能够覆盖函数返回地址。 程序中存在敏感命令的调用,我们能够获取其地址。 程序没有开启canary保护,栈溢出可以被利用。 Implementation 找到敏感命令system('/bin/sh')的地址 计算esp到返回地址的偏移量,构造payload覆盖返回地址为敏感命令的地址 运行程序,getshell Template1234567from pwn import *context.binary = elf = ELF('./vuln')context.log_level = 'debug'p = remote('ip', port)payload = <padding> + <loc of vulnerable...