LOADING

加载过慢请开启缓存 浏览器默认开启

基于idapy与LLM接口实现全自动化二进制漏洞分析

2025/2/10 auto analysis

这个应该是我开年做的最有意义的一件事情了。目前工具不打算开源,但是实际实现也不复杂,不是吗?

选择的样本是我曾经挖掘过的totolink

版本:_TOTOLINK_C818KR-1C_A830R_IP04393_8197F_SPI_8M64M_V4.1.2cu.5182_B20201102_ALL

目标程序为固件里面的downloadFile.cgi

漏洞报告图

下面是自动化生成的docx文档报告

Image

Image

Image Image Image

Image

漏洞报告文档

下面是纯文本分析

================================================================================
                                   二进制安全分析报告                                    
生成时间: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也是有的。

Image