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装载地址

[Xman] level3_x64

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

[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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2017年书单:16本书 1.竞争性销售:to B 销售的一本好书,很多实战技巧和实例,强烈推荐。京东阅读上有电子...
    竹子1Q84阅读 1,035评论 0 1
  • 总是在无聊的时候,喜欢看看豆瓣上面直播的故事。近日看到一篇名为《我和怪蜀黍心塞的十年》 简单的讲,就是一个文艺少女...
    玄真大大阅读 9,050评论 5 12
  • 长投学堂:小白训练营的毕业感言 误打误撞的进了小白营,说实话,刚开始也没抱多大希望,9元钱能学点什么东东?...
    卡廿阅读 444评论 1 18
  • 读过的书,走过的路,爱过的人,你身上的每一处孤独与荣耀,都会往你的生命中注入色彩斑斓的颜料,都会让你的内心慢慢变得...
    姜月萍阅读 134评论 0 0