PWN 如何确定canary地址
源码 #include <stdio.h> void func(){ char s[20]; gets(&s); printf(s); } int main(){ func(); char s[20]; gets(&s); printf(s); } 编译 gcc -m32 -fstack-protec...
源码 #include <stdio.h> void func(){ char s[20]; gets(&s); printf(s); } int main(){ func(); char s[20]; gets(&s); printf(s); } 编译 gcc -m32 -fstack-protec...
64位寄存器8个字节,传参是寄存器+栈,rdi,rsi,rdx,rcx,r8,r9按顺序依次 基础检查 本例题是PolarD&N的基础入门pwn题 x64 ```zsh ┌──(kali㉿kali)-[~/win/Downloads] └─$ file x64 x64: ELF 64-bit...
32位寄存器4个字节,函数传参只使用栈 基础检查 本例题是PolarD&N的基础入门pwn题 小狗汪汪汪 使用file和checksec 查看elf的位数和安全保护 ┌──(kali㉿kali)-[~/win/Downloads] └─$ file woof woof: ELF 32-bit LSB executable, Intel 80386, version 1 ...
题目链接:https://ctf.show/challenges#pwn04-65 基础分析 ┌──(kali㉿kali)-[~/win/Downloads] └─$ file ex2 ex2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld...
系统调用 write mov eax, 0x4 mov ebx, 1 mov ecx, [ "Hello, World!\n" ] mov edx, 13 int 0x80 => write(1, "Hello, World!\n", 13) execve mov eax, 0xb mov ebx, [ "/bin/s...
pwntools生成shellcode from pwn import * context(os="linux", arch='amd64') # 需要设置,否则64位报错 # 32 bit shellcode = shellcraft.sh() shellcode_asm = asm(shellcode) # 64 bit shellcode = shellcraft.amd64.sh(...
作用 使程序崩溃 查看栈内容 (绕过栈保护) 任意地址读写 任意读 printf(“%3$d”, 1,2,3); printf(“%s %s %s”) 当不给参数时,会尝试读取栈上的数据 任意写 int count = 0; printf(“%n”, &count); %n 一次性写入4个字节 %hn 2个字节 %hhn 一个字节 绕过C...
题目来源: PolarCTF pwn what’s your name 基础分析 ┌──(kali㉿kali)-[~/win/Downloads] └─$ file pwn2 pwn2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-lin...
需要关闭NX、 基础检查 本例题是PolarD&N的中等入门pwn题 getshell ```zsh ┌──(kali㉿kali)-[~/win/Downloads] └─$ file pwn2 pwn2: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, int...
关于64位程序堆栈平衡的处理 堆栈平衡: 当我们在堆栈中进行堆栈的操作的时候, 一定要保证在ret这条指令之前,esp指向的是我们压入栈中的地址, 函数执行到ret执行之前,堆栈栈顶的地址 一定要是call指令的下一个地址。 含义就是 当函数在一步步执行的时候 一直到ret执行之前,堆栈栈顶的地址 一定要是call指令的下一个地址。 也就是说函数执行前一直到函数执行...