Skip to content

Pwn 所需要的基础知识

复制本地路径 | 在线编辑

C++ 和 汇编语言的转换

puts, gets

基本格式

# rdi -> memory pointer
lea rdi, str.test / [test]
call puts / gets

printf

基本格式

# printf("a = %d, b = %d", a, b);

push address(a)
push address(b)
lea rdi, "a = %d, b = %d"
call printf

scanf

基本格式

# scanf("%d%d%d", &a, &b, &c);

# 具体顺序可能不一样
lea rdi, "%d%d%d"
mov rsi, address(a)
mov rdx, address(b)
mov rcx, address(c)
call scanf

目前用到的保护机制

也就是checksec命令出来的结果显示

  • Canary : 很简单,就是栈保护
  • NX(DEP) : 就是禁止在数据类型的地址处执行代码
  • FORITY : 就是检查read这些函数有没有格式化字符串漏洞→对应代码形式为printf_chk
  • RELOAD : 就是防止修改 GOT 表,FULL RELOAD→GOT 表只读,Partial RELOAD→部分只读
  • PIE(ALSR) : 就是地址随机化,就是比如之前做过的题目中,栈的位置每次都是改变的,这就是地址随机化

系统架构

查看系统的结构:uname -m

目前的 CPU 架构

cpu_name

Comments