这个应该是我开年做的最有意义的一件事情了。目前工具不打算开源,但是实际实现也不复杂,不是吗?
选择的样本是我曾经挖掘过的totolink
版本:_TOTOLINK_C818KR-1C_A830R_IP04393_8197F_SPI_8M64M_V4.1.2cu.5182_B20201102_ALL
目标程序为固件里面的downloadFile.cgi
漏洞报告图
下面是自动化生成的docx文档报告
漏洞报告文档
下面是纯文本分析
================================================================================
二进制安全分析报告
生成时间:2025-02-10 21:16:18
================================================================================
[风险概况]--------------------------------------------------------------------------
▪ 发现高危函数:6 个
▪ 总漏洞路径:32 条
▪ 风险分布:
9.8 [▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ ] 2 个漏洞
8.1 [▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇] 3 个漏洞
7.5 [▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ ] 1 个漏洞
[详细漏洞分析]-----------------------------------------------------------------------
1. 目标函数:strcpy
▪ CWE 类型:CWE-120
▪ CVSS 评分:9.8
▪ 影响版本:All versions
▪ 漏洞路径:
├─ sub_401724 (401724)
│ ├─ main (4017b8)
│ └─ strcpy (400c00)
├─ sub_401724 (401724)
│ ├─ main (4017b8)
│ └─ strcpy (400c00)
├─ main (4017b8)
└─ strcpy (400c00)
├─ main (4017b8)
└─ strcpy (400c00)
├─ main (4017b8)
└─ strcpy (400c00)
├─ main (4017b8)
└─ strcpy (400c00)
├─ main (4017b8)
└─ strcpy (400c00)
▪ 漏洞描述:缓冲区溢出漏洞,由于使用strcpy函数进行字符串拷贝时未进行长度校验,可能导致缓冲区溢出。
▪ 触发逻辑:['QUERY_STRING → v14 → v3 → v25 → v4 → v26 → strcpy(v26, v4)', 'QUERY_STRING → v14 → v3 → v25 → v5 → v27 → strcpy(v27, v5)', 'QUERY_STRING → v14 → v3 → v25 → v4 → v26 → strcpy(v26, v4)', 'QUERY_STRING → v14 → v3 → v25 → v5 → v27 → strcpy(v27, v5)']
▪ 修复建议:
• 使用strncpy替代strcpy,确保拷贝长度不超过目标缓冲区大小
• 在拷贝前进行长度校验,确保源字符串长度不超过目标缓冲区大小
2. 目标函数:printf
▪ CWE 类型:CWE-134
▪ CVSS 评分:8.1
▪ 影响版本:All versions
▪ 漏洞路径:
├─ sub_400FE0 (400fe0)
│ ├─ sub_4012BC (4012bc)
│ │ ├─ main (4017b8)
│ │ └─ printf (400c20)
├─ sub_400FE0 (400fe0)
│ ├─ sub_4012BC (4012bc)
│ │ ├─ main (4017b8)
│ │ └─ printf (400c20)
├─ main (4017b8)
└─ printf (400c20)
▪ 漏洞描述:格式化字符串漏洞,由于printf函数直接使用未经验证的用户输入作为格式化字符串参数,可能导致信息泄露或任意代码执行。
▪ 触发逻辑:['环境变量QUERY_STRING → v14 → v24 → printf', '环境变量QUERY_STRING → v14 → v22 → printf']
▪ 修复建议:
• 使用printf时,避免直接使用用户输入作为格式化字符串,应使用固定字符串
• 使用snprintf等安全函数替代printf
3. 目标函数:system
▪ CWE 类型:CWE-78
▪ CVSS 评分:9.8
▪ 影响版本:All versions
▪ 漏洞路径:
├─ main (4017b8)
└─ system (400ca0)
├─ main (4017b8)
└─ system (400ca0)
├─ main (4017b8)
└─ system (400ca0)
├─ main (4017b8)
└─ system (400ca0)
├─ main (4017b8)
└─ system (400ca0)
├─ main (4017b8)
└─ system (400ca0)
├─ main (4017b8)
└─ system (400ca0)
▪ 漏洞描述:通过环境变量QUERY_STRING传递的命令字符串未经过滤直接传递给system函数执行,存在命令注入漏洞。
▪ 触发逻辑:['QUERY_STRING (环境变量) → v14 (未过滤) → v24 (格式化字符串) → system (危险函数)']
▪ 修复建议:
• 使用安全的函数替代system,如execve,并严格限制命令参数
• 对QUERY_STRING进行严格的输入验证和过滤,移除所有可能的命令注入字符
4. 目标函数:strtok
▪ CWE 类型:CWE-120
▪ CVSS 评分:8.1
▪ 影响版本:All versions
▪ 漏洞路径:
├─ sub_401724 (401724)
│ ├─ main (4017b8)
│ └─ strtok (400d30)
├─ sub_401724 (401724)
│ ├─ main (4017b8)
│ └─ strtok (400d30)
├─ main (4017b8)
└─ strtok (400d30)
├─ main (4017b8)
└─ strtok (400d30)
├─ main (4017b8)
└─ strtok (400d30)
▪ 漏洞描述:缓冲区溢出漏洞,由于使用strtok函数处理输入数据时未进行长度校验,可能导致缓冲区溢出。
▪ 触发逻辑:['QUERY_STRING → v14 → v25 → strtok → strcpy → v26', 'QUERY_STRING → v14 → v25 → strtok → strcpy → v27']
▪ 修复建议:
• 使用strncpy替代strcpy,确保拷贝长度不超过目标缓冲区大小。
• 在strtok使用前,对输入数据进行长度校验。
5. 目标函数:sprintf
▪ CWE 类型:CWE-120
▪ CVSS 评分:8.1
▪ 影响版本:All versions
▪ 漏洞路径:
├─ sub_4012BC (4012bc)
│ ├─ main (4017b8)
│ └─ sprintf (400dc0)
├─ main (4017b8)
└─ sprintf (400dc0)
├─ main (4017b8)
└─ sprintf (400dc0)
├─ main (4017b8)
└─ sprintf (400dc0)
├─ main (4017b8)
└─ sprintf (400dc0)
├─ main (4017b8)
└─ sprintf (400dc0)
├─ main (4017b8)
└─ sprintf (400dc0)
├─ main (4017b8)
└─ sprintf (400dc0)
├─ main (4017b8)
└─ sprintf (400dc0)
▪ 漏洞描述:sprintf函数存在缓冲区溢出风险,由于未对输入字符串长度进行校验,可能导致目标缓冲区溢出。
▪ 触发逻辑:['环境变量QUERY_STRING → v14 → v24 → sprintf(v24, "echo QUERY_STRING:%s > /tmp/download", v14)', '环境变量QUERY_STRING → v14 → v3 → v25 → v4 → v26 → v5 → v27 → Object → v6 → v18 → v7 → v19 → v20 → v8 → sprintf(v24, "echo appId:%s versionId:%s path:%s fileName:%s >> /tmp/download", v26, v27, v8, v20)']
▪ 修复建议:
• 使用snprintf替代sprintf,限制输出字符串的长度。
• 在sprintf调用前,对输入字符串进行长度校验,确保不超过目标缓冲区大小。
6. 目标函数:access
▪ CWE 类型:CWE-22
▪ CVSS 评分:7.5
▪ 影响版本:All versions
▪ 漏洞路径:
├─ sub_4012BC (4012bc)
│ ├─ main (4017b8)
│ └─ access (400e00)
▪ 漏洞描述:路径遍历漏洞,由于未对用户输入进行有效校验,攻击者可以通过构造恶意路径访问系统文件。
▪ 触发逻辑:['环境变量QUERY_STRING→v14→v24→system调用', 'access函数调用路径:sub_4012BC→main→access']
▪ 修复建议:
• 对用户输入进行严格的路径校验,禁止使用相对路径或特殊字符。
• 使用安全的文件访问函数,如openat,避免直接使用access函数。
[附录]---------------------------------------------------------------------------
▣ 漏洞评级标准:
- CRITICAL (9.0-10.0) 关键漏洞
- HIGH (7.0-8.9) 高危漏洞
- MEDIUM (4.0-6.9) 中危漏洞
- LOW (0.1-3.9) 低危漏洞
固件漏洞指明图
下面是固件漏洞,如果看了报告分析的就知道 分析准确率不说百分百,百分之90也是有的。