sql注入_字符型、数字型判断

2023-11-18

如何判断sql注入是字符型还是数字型?

在进行sql注入时,字段类型分为字符型或者数字型,意味着我们需要构造不同的sql语句。

假设存在sql注入的url是:http://192.168.0.1/id=1

数字型判定

1、and或者or

假设数据库的执行语句是:select * from table where id=$id

当查询id=1的页面时返回正常页面,此时执行的语句是:select * from table where id=1

假如在1后面加上 and 1=2 , $id的值就是1 and 1=2

这时数据库执行的语句就是 select * from table where id=1 and 1=2

1=2为假,真and假=假
语句正确,逻辑错误,页面返回错误

同理 如果$id的值就是1 and 1=1, 真and真=真,页面返回正常

假如在1后面加上 or 1=2, $id的值就是1 or 1=2

这时数据库执行的语句就是 select * from table where id=1 or 1=2

1=2为假,真or假=真
语句正确,逻辑正确,页面返回正常

同理 如果$id的值就是1 or 1=2, 真or假=真,页面返回正常

所以,我们可以使用and或者or这两个逻辑运算符来判断字段是否是数字型,但因为字段型的and和or返回的结果都为正常页面,我们就不好通过or来进行比较,一般习惯于用and 1=2,如果是数字型,返回错误,但如果是字符型,返回正确,这样两者之间就有了不同,有了比较。具体的理解可以接着往下看。

2、加单引号

假如在1后面加上单引号’ , $id的值就是1’

这时数据库执行的语句就是 select * from table where id=1’

单引号不匹配,语句正确,页面返回错误

字符型判断

1、and或者or

假设数据库的执行语句是:select * from table where id=’$id’

当查询id=1的页面时返回正常页面,此时执行的语句是:select * from table where id=‘1’

假如在1后面加上 and 1=2 $id的值就是1 and 1=2

这时数据库执行的语句就是 select * from table where id=‘1 and 1=2’

页面返回正常

假如在1后面加上 or 1=1 $id的值就是1 or 1=1

这时数据库执行的语句就是 select * from table where id=‘1 or 1=1’

页面返回正常

不管是and或者or,执行结果都是一样的,都会返回id=1的页面,那么为什么会这样呢?

因为数据库中id的类型是数值型,比如int型,而MySQL数据库在执行语句时是会自动进行类型转换的,输入的字符1 or 1=1会在执行时被自动转换成int型的1,所以最终的执行语句还是select * from table where id=‘1’

这是数据库的特性问题,后面的字符可以是任意的,不会影响查询,我们在1后面加上任意字符,比如1dogjoreg,最后都会被转换为1来进行语句执行。

如果id本身就是varchar类型的,那么数据库查询的时候就会进行精准的匹配,这样子’1dogjoreg’等类似的数据由于数据库里没有匹配项,查询结果为空。

所以,如果字段是字符型的,那么我们使用and或者or来测试时页面返回都是正常的,接上文,比较不同可以得出结论

2、加单引号

输入$id=1’

执行的SQL语句就是select * from table where id=‘1’’

单引号不匹配,语句错误,页面错误

所以我们要闭合多余的单引号,使用注释符#或者–+

执行的SQL语句就是select * from table where id=‘1’ --+’

语句正确,页面正常

这里就和上文中数字型判定方式产生了不同了,数字型判定尽管加上注释符,执行的SQL语句是select * from table where id=1’ --+’ 因为单引号还是不匹配,语句还是错误的,页面还是返回错误。

综上,可以得出下表:

$id 数字型(id=$id) 字符型 (id=’$id’)
1 and 1=1 id=1 and 1=1 返回正常 id=‘1 and 1=1’ 返回正常
1 and 1=2 id=1 and 1=2 返回错误 id=‘1 and 1=2’ 返回正常
1 or 1=1 id= 1 or 1=1 返回正常 id= ‘1 or 1=1’ 返回正常
1 or 1=2 id=1 or 1=2 返回正常 id=‘1 or 1=2’ 返回正常
1’ id=1’ 返回错误 id=‘1’’ 返回错误
1’ --+ id=1’ --+ 返回错误 id=‘1’ --+’’ 返回正常
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sql注入_字符型、数字型判断 的相关文章

  • 在 Python 中,如果我有 unix 时间戳,如何将其插入 MySQL 日期时间字段?

    我正在使用 Python MySQLDB 我想将其插入 Mysql 中的 DATETIME 字段 我该如何使用cursor execute 来做到这一点 要将 UNIX 时间戳转换为 Python 日期时间对象 请使用datetime fr
  • 如何插入包含“&”的字符串

    如何编写包含 字符的插入语句 例如 如果我想将 J J Construction 插入数据库的列中 我不确定这是否有什么不同 但我正在使用 Oracle 9i 我总是忘记这一点 然后又回到它 我认为最好的答案是迄今为止提供的答复的组合 首先
  • Laravel Eloquent 预加载:加入同一个表两次

    我有一个users表和一个约会桌子 在约会表中 我有两个用户 ID customer id staff id 我想检索所有带有客户姓名和员工姓名的约会 users table id name appointments table id st
  • 如何获得组中“中间”值的平均值?

    我有一个包含值和组 ID 的表 简化示例 我需要获取中间 3 个值的每组的平均值 因此 如果有 1 2 或 3 个值 则它只是平均值 但如果有 4 个值 它将排除最高值 5 个值将排除最高值和最低值 等等 我正在考虑某种窗口函数 但我不确定
  • 将自动递增值添加到只有一列的表中

    我需要创建一个基本上仅保留索引列表的表 因此 我创建了一个只有一个名为 id 的自动递增列的表 但是 我似乎无法隐式地将自动递增值添加到该表中 我知道通常当您在表中有这样一列 不仅仅是此列 时 您可以执行以下操作 插入表 col1 col2
  • IN 运算符对 SQL 查询性能的影响有多大?

    我的 SQL 查询需要 9 个小时才能执行 见下文 Select Field1 Field2 From A Where Field3 IN 45 unique values here 当我将此查询拆分为 3 个完全相同的查询 仅每个 IN
  • 如何获取Postgres当前的可用磁盘空间?

    在开始在数据库中进行某些工作之前 我需要确保至少有 1Gb 的可用磁盘空间 我正在寻找这样的东西 select pg get free disk space 是否可以 我在文档中没有找到任何相关内容 PG 9 3 操作系统 Linux Wi
  • SQLite 使用循环重新编号 ID

    您好 我有一个包含许多插入行的表 我需要按 id 对所有行重新编号并排序 我找到了这段代码 但它对我不起作用 SET i 100 UPDATE main Categories SET ID i i 1 WHERE Name White AL
  • PostgreSQL WHERE 计数条件

    我在 PostgreSQL 中有以下查询 SELECT COUNT a log id AS overall count FROM Log as a License as b WHERE a license id 7 AND a licens
  • 在python中将数据库表写入文件的最快方法

    我正在尝试从数据库中提取大量数据并将其写入 csv 文件 我正在尝试找出最快的方法来做到这一点 我发现在 fetchall 的结果上运行 writerows 比下面的代码慢 40 with open filename a as f writ
  • 数据库分区 - 水平与垂直 - 规范化和行拆分之间的区别?

    我试图理解不同的概念数据库分区这就是我的理解 水平分区 分片 将表拆分为不同的表 其中将包含初始表中的行的子集 如果按大陆拆分用户表 我见过很多这样的示例 例如北美的子表 欧洲的另一个子表 ETC 每个分区位于不同的物理位置 理解 机器 据
  • 索引在 NOT IN 或 <> 子句中起作用吗?

    我读过 至少 Oracle 数据库中的普通索引基本上是 B 树结构 因此存储处理适当根节点的记录 小于 根的记录被迭代地存储在树的左侧部分 而 大于 根的记录被存储在右侧部分 正是这种存储方法有助于通过树遍历实现更快的扫描 因为深度和广度都
  • parent_id 是外键(自引用)并且为 null?

    浏览 Bill Karwin 的书 SQL Antipatterns 第 3 章 Naive Trees 邻接表 父子关系 有一个注释表的示例 CREATE TABLE Comments comment id SERIAL PRIMARY
  • 这个 SQL 语句在 Linq 中的等价物是什么?

    我需要将此 SQL 语句移植到 LINQ SELECT f ID as IdFlight Tarif 1 as Tarif f Time f TimeOfArrival sl Name as FromLoc sl Country as Fr
  • 如何处理多个连接

    我有一个复杂的查询 需要总共 4 个表中的字段 内部联接导致查询花费的时间比应有的时间长得多 我已经运行了一个 EXPLAIN 语句 其可视化结果附在下面 这是我的查询 SELECT pending corrections correcte
  • 有什么好的方法可以在 SQL Server 中构建逗号分隔列表吗?

    在 Firebird 中 有一个聚合称为List http www firebirdsql org refdocs langrefupd21 aggrfunc list html它将多个结果转换为逗号分隔的字符串 SQL Server 中似
  • MySQL 中的 INSERT 和 UPDATE 有什么区别?

    它似乎INSERT and UPDATE对我做同样的事情 有什么场合我应该使用INSERT代替UPDATE反之亦然 In 增删改查操作 http en wikipedia org wiki Create read update and de
  • 使用 C# 和 ADO.NET SET NOCOUNT ON 并读取消息

    SET NOCOUNT ON 会阻止显示受 Transact SQL 语句或存储过程影响的行数的消息作为结果集的一部分返回 a 如何使用 C 和 ADO NET 读取这些消息 我假设读取这些消息的 C 代码是相同的 无论 T SQL 语句是
  • 如何使用 aerospike 加载器在 aerospike 中加载嵌套的 csv 文件?

    我已将 JSON 文件转换为 CSV 格式 现在使用 aerospike 加载器将 CSV 加载到 Aerospike 中 我可以为简单的结构执行此操作 但如何修改 allDatatype json 的内容以在 Aerospike 中加载嵌
  • 使用 unnest() 返回行?

    我尝试在完成后返回一组行UPDATE 像这样的东西 UPDATE Notis new noti SET notis noti record type FROM SELECT FROM Notis WHERE user id 2 FOR UP

随机推荐

  • Linux部署项目

    一 Linux介绍 背景 Java项目通常基于windows系统进行开发 服务器部署则是基于Linux 1 1 Linux系统概述 Linux是一套免费使用 自由传播的类unix操作系统 支持多用户 多任何 支持多线程和多CPU的操作系统
  • idea技巧之同时编辑多行代码

    如何同时编辑多行代码 eclipse好像没有这种功能 有一次看到老师用eclipse写代码 10多行 每一行添加一个单引号 一个一个添加 慢的想死 想起做前端项目使用的 webstone可以同时编辑多行代码 现在看到idea 功能如此强大
  • Window10屏幕亮度无法调节尝试解决方法

    换成win10后突然屏幕亮度调节不了 尝试几种方法 失败方法一 注册表修改 1 首先 请大家在桌面上按下Windows徽标键 R键 打开运行菜单窗口 在窗口中输入 regedit 关键字 按下回车键之后打开注册表编辑器 2 打开注册表编辑器
  • vue中使用高德地图,只加载出地图logo,地图没有加载出来

    在使用vue开发的过程中 需要使用到高德地图 但按照高德地图的官方文档配置后 只显示高德地图的logo 但是始终加载不到地图 如下图所示 解决办法 将全局引用的的mockjs注释掉就可以解决这个冲突问题
  • Elaticsearch安装越南语分词器

    1 目标 实现支持英 德 法 葡萄牙 西班牙 俄 印尼 泰 繁中 简中 日 韩 越南 意大利 阿拉伯 土耳其 乌克兰 荷兰 波兰 19种文字的分词器 2 自带的分词器 英 english 德 german 法 french 葡萄牙 port
  • 用spss进行主成分分析

    此次同样通过一道例题讲解如何运用spss进行对数据的主成分分析 下表是我国2005年第1 2季度各地区城镇居民家庭收支基本情况的统计数据 根据这些数据进行主成分分析 并依据分析结果对地区城镇居民家庭收支情况进行排序和分类 地区 平均每户人口
  • 买《Kotlin从小白到大牛》专题视频课程,送配套纸质图书

    经过一年多时间的呕心沥血 Kotlin立体化图书 Kotlin从小白到大牛 即将与大家见面了 所谓立体化图书包括 电子图书 视频 课件和服务等内容 Kotlin从小白到大牛 纸质图书已经上市 为了答谢广大学员对智捷课堂以及关老师的支持 现购
  • python x=[random.randint(0,100) for i in range(50)]什么意思?列表解析

    如有错误欢迎指正 在写python的时候遇到一个问题 其中一段代码是x random randint 0 100 for i in range 50 这个用法叫 列表解析 这句代码的功能是生成一个具有50个0 100之间的整数 具体可以看下
  • Python:简易的串口收发程序

    Python 简易的串口收发程序 更新历史 20201204 首次发布 最近需要搞一个基于Python的串口程序 要求 能够将字符串形式的十六进制数 例如 12 34 CD EF 转化成对应的二进制数据后发送给一个串口设备 能够从串口设备接
  • ChatGPT做到人人都可以配置思科华为网络设备

    最近有个一个想法 chatgpt能不能帮忙配置网络设备 于是我开始在网上找了个拓扑图 然后我将拓扑图及需求 以prompt的形式发送给chatgpt 然后chatgpt根据我的要求 将所有节点的配置全部输出了出来 真是一个新时代来了 我觉得
  • AIOps 在美团的探索与实践 —— 故障发现篇

    摘要 AIOps 最初的定义是Algorithm IT Operations 是利用运维算法来实现运维的自动化 最终走向无人化运维 随着技术成熟 逐步确定为Artificial Intelligence for IT Operations
  • Java ee学习笔记

    Servlet简介 Servlet技术规范是JavaEE技术规范中的一个重要组成部分 Servlet是一种独立于平台和协议的服务器端的Java应用程序 可以生成动态的Web页面 实际上 Servlet不仅仅是用于返回HTML的页面的 比如
  • 创建简单的Windows驱动程序并与应用程序通信

    创建简单的Windows驱动程序并与应用程序通信 在本篇博客中 我们将创建一个简单的Windows驱动程序 并实现与用户模式应用程序的通信 我们将展示如何创建驱动程序 处理IRP请求 并在应用程序中使用CreateFile和WriteFil
  • MXNet==1.9.x 源代码编译流程(windows + python)

    只为mxnet for win开发做做小贡献 mxnet深度玩家 写在开头 注意windows powershell 第三方依赖 python git 7zip cmake ninja opencv等 的安装和运行版本 x64和x84 须统
  • 【算法】稳定匹配(C++版)

    由于学习需要 然后花费将近两天时间研究这个问题 然后用C 描述出来 具体内容看下面 问题描述 见百度百科 https baike baidu com item E7 A8 B3 E5 AE 9A E5 A9 9A E5 A7 BB E9 9
  • Qt - 使用子目录项目来 配置多个子工程/子模块

    QT 使用子目录项目来 配置多个子工程 子模块 简述 项目配置概览 项目的多工程配置 使用多模块 特别鸣谢 Qt 之 pro 配置多个子工程 子模块 Qt Creator创建子目录项目并自定义目标文件输出目录 使用子目录项目来 配置多个子工
  • unity打包后无法读取Excel解决方法

    一 前言 最近几乎遇到了所有能遇到的unity读取Excel 的问题 因为使用的是unity5 4 而且还是32位 所以出现各种问题在所难免 废话不多说 现有的现象是 在unity的编辑器里可以完美运行 读取Excel不成问题 但是打包成e
  • 朋友们,想去一线大厂?卷起来...

    大家好 我是Tom哥 计算机研究生 校招进阿里 P7技术专家 出过专利 CSDN博客专家 负责过电商交易 社区团购 流量营销 金融等业务 多年一线团队管理经验 多年的大厂浸染 参加多次淘宝双11大促活动 在系统架构方面有丰富经验 为了帮助大
  • vue如何阻止事件冒泡

    vue阻止事件冒泡 div span bt1 span span bt2 span div click stop这样点击bt1就不会执行fatherFunc
  • sql注入_字符型、数字型判断

    如何判断sql注入是字符型还是数字型 在进行sql注入时 字段类型分为字符型或者数字型 意味着我们需要构造不同的sql语句 假设存在sql注入的url是 http 192 168 0 1 id 1 数字型判定 1 and或者or 假设数据库