首页 > 数据库 >ThinkPHP 6.0 SQL注入漏洞修复

ThinkPHP 6.0 SQL注入漏洞修复

时间:2024-02-06 19:24:51浏览次数:38  
标签:val 漏洞 -- 6.0 keywords template SQL ThinkPHP

公司买的官网被政府网安检测出SQL注入漏洞:

隐患描述

SQL漏洞证明语句:

 

python3 sqlmap.py -u "http://xxxx?keywords=1" -p keywords --level=5 --risk=3 --tamper=space2comment.py,between.py --current-db --random-agent --time-sec=10 --batch --dbms="MySQL"

漏洞回显:

权重归属证明:https://www.aizhan.com/cha/

审查项目代码,发现整个页面都是模板生成。找到前端:lists_down.html:

<div class="boxBottom">

                {zhl:list titlelen='30' addfields='file,ftype' orderby='sort_order desc,add_time desc' id="val" pagesize="8"}

                    <div class="item">

                        <a href="javascript:;" onclick="go_down(this)" data-file="{$val.file}" class="flexBetween">

                            <div class="left">

                                <div>{$val.title} </div>

                                <p>{$val.ftype} | {:date('Y年m月d日',$val.add_time)}</p>

                            </div>

                            <div class="right">

                                <p>

                                    <img src="{__PUBLIC_PATH}/images/icon19.png" class="img1">

                                    <img src="{__PUBLIC_PATH}/images/icon19_.png" class="img2">

                                    资料下载

                                </p>

                            </div>

                        </a>

                    </div>

                {/zhl:list}

            </div>

然后再无头绪,不知道后端代码在哪。直到偶然机会搜索到:\vendor\topthink\think-template\src\template\taglib\Zhl.php文件下的tagList方法,

顺藤摸瓜找到:vendor\topthink\think-template\src\template\taglib\zhl\TagList.php文件中,对keywords的处理,是通过sql拼接:

array_push($condition, "a.title like '%{$keywords}%'");

打上日志后发现果然在这,于是在其前面加上敏感字符处理:

//duxd 处理sql注入 240206
$keywords = $value;
$keywords = str_replace('\\', '\\\\', $keywords); // 转义反斜杠  
$keywords = str_replace('\'', '\\\'', $keywords); // 转义单引号  
$keywords = str_replace('"', '\\"', $keywords); // 转义双引号             

处理完毕,留个记号,以备后查。

中间用到了python复现检测,方法参照:https://blog.csdn.net/u013541325/article/details/109334272

 中间感谢同事们的帮助。

标签:val,漏洞,--,6.0,keywords,template,SQL,ThinkPHP
From: https://www.cnblogs.com/dxdsbook/p/18010197

相关文章

  • 力扣刷题——SQL
    力扣刷题——高频SQL50题:题目链接:https://leetcode.cn/problems/department-top-three-salaries/?envType=study-plan-v2&envId=sql-free-50185.部门工资前三高的所有员工:表:Employee:Department+--......
  • MySQL存储引擎-InnoDB数据页
    MySQL存储引擎-InnoDB数据页MySQL一个数据页默认16kb,MySQL为了不同目的涉及了很多类型的数据页,如undo页、ChangeBuffer页等等。我们这里只关心存放数据的页,即索引(INDEX)页。一个数据页的存储空间大致被划分为7部分,分别为:1、FIleHeader 文件头 38字节2、PageHeader页面......
  • Ubuntu18.04定时备份MySQL、PostgreSQL数据库
    1、备份MySQL数据库脚本LOG_DATE=`date+'%Y-%m-%d%H:%M:%S'`LOG_PATH=/home/dbserver/script_data/backup.logecho"$LOG_DATE=======>开始备份以下mysql数据库:">>${LOG_PATH}DUMP=/usr/bin/mysqldumpOUT_DIR=/home/dbserver/backup/mysql_backupLINU......
  • ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'mysql&
    转自https://www.cnblogs.com/jiangfeilong/p/10560754.html 关键要授予 WITHGRANTOPTION;#原因:修改数据库账号时删除了默认的localhostroot, 新建了%root 但没有赋予全部权限;解决方法:1.关闭数据库#mysqldstop2.在my.cnf里加入skip-grant-tables3.停止服务器......
  • CentOS安装配置MySQL详细教程
    CentOS安装配置MySQL详细教程一、卸载系统中自带的MariaDB#检查MariaDBrpm-qa|grepmariadb#卸载MariaDBrpm-e--nodepsmariadb-libs二、下载MySQL安装包下载地址https://downloads.mysql.com/archives/community/三、将MySQL压缩包上传至/opt目录四、解压MyS......
  • JavaScript 实现类似SQL 左联接式的对象数组合并
    在JavaScript中,你可以使用对象合并(Objectmerging)来模拟数据库的左联接操作。左联接操作会将两个对象的特定属性进行合并,类似于SQL中的LEFTJOIN操作。假设你有两个对象,每个对象代表一个表:consttable1=[{id:1,age:30},{id:3,age:25},];consttable2......
  • SpringBoot集成Flink-CDC 采集PostgreSQL变更数据发布到Kafka
    (之前写了一个flink-cdc同步数据的博客,发布在某N,最近代码开源了,直接复制过来了,懒得重新写了,将就着看下吧)最近做的一个项目,使用的是pg数据库,公司没有成熟的DCD组件,为了实现数据变更消息发布的功能,我使用SpringBoot集成Flink-CDC采集PostgreSQL变更数据发布到Kafka。 一、业务......
  • Hive:构建于 Hadoop 之上、让你像写 SQL 一样编写 MapReduce 程序
    Hive介绍本次我们来聊一聊Hive,它是由Facebook开源的一款基于Hadoop的数据仓库工具,用于解决海量结构化日志的数据统计与分析。Hive通过将结构化的数据映射为一张表,并提供类SQL查询功能,让开发人员能够编写SQL进行数据分析。在介绍Hadoop的时候我们说过,使用MapReduce......
  • navicat连接mysql服务遇到的问题
    问题现象及描述:navicat连接数据库提示:2003-Can'tconnecttoMySqlserveron'192.168.245.131',(unkownerror)问题可能出现的原因:1、数据库连接ip、端口、用户名、密码信息输入错误(数据库连接四要素)2、该用户不可远程连接3、linux防火墙未开放解决方式数据库连接ip问题:......
  • ksqltest
    第三方都是水电费是的 水电费水电费是的防守使用localsocket方式登录数据库[kingbase@node1~]$ksql-dtest-Usystem使用TCP/IP方式登录数据库[kingbase@node1~]$ksql-h192.168.40.111-p54321-dtest-Usystem使用连接串方式登录数据库[kingbase@n......