调用约定 指针型即地址 int & pointer 32位系统调用在执行int 0x80之前,通常不需要将参数压入栈中。参数是通过寄存器传递的,而不是通过栈传递的call execve()eax 系统调用号 11 0x0bebx 第一个参数 程序路径地址 /bin///shecx 第二个参数 程序参数的地址(给程序传递的参数)edx 第三个参数 环境变量 有一道32位题有int 0 2025-03-04 pwn
C函数栈帧 x86_64 & x86函数基本结构 123456push rbpmov rbp, rsp...mov rsp, rbppop rbpret 进入新函数的栈帧前,要要将调用函数指令的下一条指令地址压入栈里(调用者的栈帧)。 64位函数栈帧再调用新函数前rsp是00调用新函数后先把下一条指令的地址:jmp main+175 压入栈此时rsp是08因此在新函数栈帧中第一个push前rsp 2025-03-04 pwn
pwntools使用 ELF1exe = ELF("./attachment") ELF对象的属性四大用途 sym 查找符号地址 符号表 函数、变量地址 plt 获取plt表地址 ==plt表和got表相比最重要的特性就是plt表可执行而got表不可执行 plt会跳转到相应函数处的地址== got 获取got表地址 查找字符串的地址 .search[b 2025-03-04 pwn
ret2libc libc基地址 + 函数偏移量 = 函数真实地址 问题是==怎么找libc基地址==呢?=> 泄漏一个函数的真实地址 有时间了解一下 libc的延迟绑定技术 got表-plt表 泄漏一个函数的真实地址=> 一般方法是采用==got表泄漏==以puts函数为例只要之前执行 2025-03-03 pwn
GHCTF-2025_wp Hello_world给了后门函数,基本的栈溢出有pie partial write + 栈对齐exp: 123456789101112131415161718192021222324252627282930from pwn import *import oscontext(arch='amd64', os='linux', log_level=' 2025-03-03 WP
使用pwntools时的语法注意点 p32不能操作负数需要和负数 与 上 1,转化为无符号数 12var_v2 = -557122643 & 0xFFFFFFFF # 32位 8个F (4字节)p32(var_v2) 2025-03-02 pwn
虚拟环境网络问题 wsl2联网问题老生常谈了,写个脚本放在./scripts/proxy.sh 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364#!/bin/sh# hostip=$(cat /etc/resolv.conf | 2025-03-01 Environment