首页
社区
课程
招聘
[原创] Windows Internet Connection Sharing (ICS) cve-2023-38148 分析
发表于: 2023-9-13 18:53 5213

[原创] Windows Internet Connection Sharing (ICS) cve-2023-38148 分析

2023-9-13 18:53
5213

## 环境搭建


首先, 创建一个windows虚拟机, 添加两个网卡, 记作net1, net2. 依照 [Enable Internet Connection Sharing (ICS) in Windows 10](c3aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6N6i4m8H3L8%4u0@1i4K6u0W2M7X3W2F1k6$3y4W2L8Y4c8J5j5h3I4Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0V1N6U0u0Q4x3V1k6q4L8X3q4T1L8r3g2Q4x3X3c8u0L8Y4c8W2M7X3&6W2N6q4)9J5k6p5y4G2L8X3&6W2j5%4c8A6L8$3&6Q4x3X3c8e0K9r3q4J5K9h3&6Y4i4K6u0V1d9f1y4e0i4K6u0W2K9s2c8E0L8q4)9K6c8X3u0J5j5h3&6V1i4K6y4p5f1V1y4Q4y4h3k6g2f1#2)9J5y4X3q4E0M7q4)9K6b7Y4m8J5L8$3c8#2j5%4c8Q4x3@1c8d9K9h3&6Y4b7$3g2F1N6s2u0S2L8q4)9#2k6V1#2h3f1q4)9J5y4X3q4E0M7q4)9K6b7X3I4S2L8X3N6#2j5h3N6W2i4K6y4p5k6h3&6Q4y4h3k6g2f1#2)9J5z5g2!0q4y4g2)9&6x3q4!0m8c8W2!0q4y4#2)9&6y4q4!0m8z5q4!0q4y4#2!0n7c8q4)9&6x3g2!0q4y4#2!0n7b7W2)9&6b7#2!0q4y4g2)9^5y4g2!0n7x3g2!0q4y4q4!0n7b7g2!0m8b7W2)9J5k6b7`.`.


正常启用后, 观察监听端口, 可以看到多了3个新的监听端口, 分别是53, 67, 68, 都来自同一个进程, 如下所示:


## 补丁分析


对比文件`ipnathlp.dll`文件如下:


可以看到, 在左侧行37位置, 当长度超过0x20时, 它并没有跳转到结束, 而是继续处理, 补丁后, 它直接结束了后续函数操作. 所以问题很明显, 就是在后续的操作中可能存在溢出问题.


这里`a2+228`为data开始位置, buffer空间大小为1500. `a2+220`指示buffer中数据长度.


跟踪了`DhcpExtractOptionsFromMessage`并没有发现问题, 跟踪`DhcpProcessBootpMessage->DhcpAddArpEntry`, 有如下代码:


```

    DhcpRemoveArpEntry(a1);

    memset_0(&Row, 0, sizeof(Row));

    Row.InterfaceIndex = DhcpAdapterIndex;

    Row.Address.Ipv4.sin_family = 2;

    Row.Address.Ipv4.sin_addr.S_un.S_addr = a1;

    Row.PhysicalAddressLength = v4;

    memcpy_0(Row.PhysicalAddress, Src, v4);

    v10 = CreateIpNetEntry2(&Row);

```


`v4`为`a2+230`的值, 即DHCP协议的Hardware address length 字段, `Row`是栈结构体, 大小为0xa8, 可以看到此处当`v4`超过`0xa8`时, 就会栈溢出.



[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 4145
活跃值: (31186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2023-9-15 09:51
1
游客
登录 | 注册 方可回帖
返回