jarvisOJ wp

[xman] level0

  • file : 64位 程序 静态链接加载函数
  • checksec : NX 开启(堆栈不可执行)

info :系统库函数加载到了程序中

  • tip :

1.64位程序特性 : 寄存器长度为8 , 函数传参 优先使用寄存器传参(顺序从左向右 , rdi rsi rdx rcx r8 r9), 超过 6 个参数时 使用栈传参

  1. padding 长度 需要考虑 leave 指令 (类似于 mov sp , bp ; pop bp) ,所以 padding 长度为0x80 + 8

exp.py


[Xman] level1

  • file: 32位 elf , 动态链接
  • checksec : 开启partial RELRO
  • tip :

1: 32位 程序,寄存器4位 ,使用栈传参 , 调用函数逻辑 addr_fuc + addr_pr + addr_arg1 +...+ addr_ret (addr_pr 是为了清除传入的参数 保持栈平衡)

2.此处利用的难点在于获取输入开始处地址,但是本题中的输入开始地址用printf函数给出了

exp.py


[Xman] level2

  • file : 32位 elf , 静态链接
  • checksec :nx
  • info: 和level0类似,system函数和/bin/sh加载在程序中

exp.py


[Xman] level2_x64

  • file: x64 elf , 动态链接
  • checksec : 开启 nx
  • info : 在 level2 的基础上 适应64位程序的传参方式即可

exp.py


[Xman] level3

  • file: 32位 elf
  • checksec : nx
  • info: 写一个 leak 函数,功能 :用 write 函数输出 write 的got装载地址
  • exp

[Xman] level3_x64

  • file: 64位 elf
  • checksec : nx
  • info : 在 32位 leak函数的基础上根据64位的 函数传参特性做出修改即可(可用ROPgaget 获取可用的gadget)
  • exp

[Xman] level4

  • file : 32位 elf , 动态链接
  • checksec: nx
  • info:使用了 DynELF 模块进行Memory leak
  • tip:

1.DynELF 使用的 leak 函数有格式上的要求 , 直接获取目标位置 p.recv(N) 的结果 然后return即可,不要多做处理

  1. 需要将 "/bin/sh" 写入bss段或者其他已知的可写读地址

exp.py


smashes

  • file : 64位 elf
  • checksec :stack canary | nx | fortify
  • info : 利用stack canary 会在检查失败后 调用 __stack_chk_fail 输出 argv[0] | (即程序名) 的特性 。因为没有开aslr , 可以在找到 argv[0] 后覆盖它为 flag 的地址 并且触发 stack_chk_fail 从而输出flag
  • exp.py

你可能感兴趣的:(jarvisOJ wp)