SQL约束攻击

主要知识点

数据库字符串比较:在数据库对字符串进行比较时,如果两个字符串的长度不一样,则会将较短的字符串末尾填充空格,令两个字符串的长度一致,比如,字符串A:[String]和字符串B:[String2]进行比较时,由于String2比String多了一个字符串,这时MySQL会将字符串A填充为[String ],即在原来字符串后面加了一个空格,令两个字符串长度一致。看如下两条查询语句:
select * from users where username=‘Dumb’
select * from users where username='Dumb ’
它们的查询结果是一致的,即第二条查询语句里Dumb后面的空格并没有对查询有任何影响。因为在MySQL把查询语句里的username和数据库里的username值进行比较时,它们就是一个字符串的比较操作,符合上述特征。

INSERT截断:这是数据库的另一个特性,当设计一个字段时,我们都需对其设定一个最大长度,比如CHAR(10),VARCHAR(20)等等。但是当实际插入数据的长度超过限制时,数据库就会将其进行截断,只保留限定的长度。

SQL约束攻击

后台在接收到用户名与密码后使用了php的函数mysql_real_escape_string()处理,并使用单引号包裹。验证用户名与密码的代码如下:
在这里插入图片描述
按理说上述代码不会产生SQL注入等漏洞的啊,下面介绍几类关键知识:
在SQL里执行字符串处理时,字符串末尾的空格符将会被删除。例如如下代码:
在这里插入图片描述
上述代码和username = 'test’结果是一样的。但也存在异常情况,最好的例子就是LIKE子句了。注意,对尾部空白符的这类修剪操作,主要是在“字符串比较”期间进行的。这是因为,SQL会在内部使用空格来填充字符串,以便在比较之前令其它们的长度保持一致。

在所有的INSERT查询里,SQL都会根据varchar(n)来限制字符串的最大长度。也就是说,如果字符串的长度大于“n”个字符,那么仅插入字符串的前“n”个字符。比如特定列的长度约束为“5”个字符,那么在插入字符串“testName”时,实际上只能插入字符串的前5个字符,即“testN”。
当注册时,后台一般先select一下用户名看看是否存在,然后在insert一下。示例代码如下:
在这里插入图片描述
这里注册时使用用户名+【大量空格】和随机密码注册即可完成攻击。

主要原理就是insert时候有varchar(n)的限制,大于n的时候会截取前n个存入。在数据库对字符串进行比较时,即select操作,如果两个字符串的长度不一样,则会将较短的字符串末尾填充空格,令两个字符串的长度一致。注册时select语句不会将"admin+[大量空格]11"删减到n位,所以不会被select查出与admin重复,不会返回数据,接下来就可以插入admin+[空格](截取)11和自定义密码了。

如果使用用户名“vampire”和密码“random_pass”登录的话,对比时是admin与admin+[大量空格],会将前面的admin添加空格与后面的长度相同在进行对比,那么返回的只能是我们自己注册的用户信息,而不会返回目标用户信息。SQL查询语句是一个and操作,如果密码不一样怎么会把目标用户的信息也返回回来?

当登陆时使用admin与自定义密码登陆,数据库将返回我们自己注册的账户信息,但是注意此处的return $username,虽然此时查询出来的是我们自己的用户信息,但是返回的用户名则是目标的用户名。如果此后的业务逻辑直接以该用户名为准,则我们就达到了水平越权的目的。

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

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

相关文章

Python filter 函数 - Python零基础入门教程

目录 一.Python filter 函数简介二.Python filter 函数使用 1.filter 函数简单使用2.filter 函数配合匿名函数 Lambda 使用 三.猜你喜欢 基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.Python filter 函数简介 filter 函数主要用来筛选数据&#…

AI应届博士生年薪八十万,贵吗?

前一段时间,“AI 应届博士生年薪 80 万元”上了微博热搜。这条热搜上的很莫名其妙,从行业本身来说,AI 行业的人才薪资确实高于一般行业。猎聘联合 GMIC 发布的《 2018 AI 人才竞争力报告》指出,AI 领域从业者平均薪资高于互联网行…

Python raw_input 函数 - Python零基础入门教程

目录 一.前言二.Python input 和 raw_input 区别 1.当输入为纯数字时2.当输入字符串为表达式 三.Python input 函数实现原理四.猜你喜欢 基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.前言 Python 2.x 版本中才有内置函数 raw_input 和 input 两…

BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, …

云漫圈 | 革命版互联网公司虐恋大戏,周一拿去怼业务!

周末,来几张逗逼的漫画醒醒神~!程序员/设计师/产品经理相爱相杀的「革命版互联网公司虐恋大戏」温情上映~1.微信群:添加小编微信:color_ld,备注“进群姓名公司职位”即可,加入【云计算学习交流群】&#xf…

BugkuCTF-PWN题pwn3-read_note超详细讲解

知识点 puts()的特性 , puts()会一直输出某地址的数据,直到遇到 \x00 Canary最低位为\x00(截断符) \x 和 0x 的区别: 区别不大,都是把数按16进制输出。 1、0x 表示整型数值 (十六进制) char c 0x42; 表示的是一个数值(字母B的…

Python bytearray 函数 - Python零基础入门教程

目录 一.Python bytearray 函数简介二.Python bytearray 函数使用三.bytearray 与 bytes 区别 1. bytes 不可变字节序列2.bytearray 可变字节序列 四.猜你喜欢 基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 Python 除了 bytes 字节序列 之外&#xf…

文末有福利 | 停不下来!程序员在GitHub上开源了一个自制表情包项目

世界上本没有表情包,脑洞大的人多了,便有了表情包,如今,大家伙聊天都离不开表情包,但是手头上很多时候表情包根本不够用,所以市面上就有很有App、小程序可以帮助你制作专属你的表情包而程序员在这方面就有个…

BugkuCTF-Crypto题把猪困在猪圈里

下载file.txt文件 在给的内容头部添加data:image/jpg;base64, 将base64编码转为图片 然后下载图片: 百度猪圈密码,得到flag 注意:猪圈密码flag小写

面趣 | 那些面试没过的程序员,都去了哪里?答案真的挺励志

年底又到裁员季,那些还在挣扎着找工作的小伙伴,现在怎么样了?很好奇,那些没有面试成功的朋友最后都去了哪里?尤其是程序员这一庞大群体。有人给出的答案是,不存在“没有通过一个公司的面试,那以…

dos输入java Hello,出现错误: 找不到或无法加载主类 Hello

分析:classpath没有配置正确,在最前面加上.; 备注:英文的点和分号 重新cmd进去,输java Hello,解决。

Python chr 函数 - Python零基础入门教程

目录 一.Python chr 函数简介二.Python chr 函数使用三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.Python chr 函数简介 在 Python中 ord 函数可以字符作为参数,返回对应的 ascll 码; 其中内置函数 chr 与…

BugkuCTF-Crypto题贝斯家

密文&#xff1a;iH<,{bdR2H;i6*Tm,Wx2izpx2! 本题要点&#xff1a;base91转码 看到贝斯家… 那么这串字符一定为BASE系列的了 常见的都是base64/base32/base16…和这串字符好像都不太形似 base91的编码原理 base91是将二进制数据编码为ASCII字符的高级方法。 它类似于UUe…

web前端 到底怎么学?掌握什么可以拿到高薪?

web前端到底怎么学&#xff1f;那么在讲 web前端怎么学 这个大命题之前呢&#xff0c;依据我本人的尿性&#xff0c;还是得先把你拉入坑&#xff0c;让你在坑里好好学 O(∩_∩)Oweb前端的历史渊源 和一些出处&#xff0c;童鞋们大概都有所了解了。下面我们进入【相爱】阶段&…

Python reduce 函数 - Python零基础入门教程

目录 一.Python reduce 函数简介 1.reduce 函数语法2.reduce 函数原理 二.Python reduce 函数使用 1.reduce 函数普通使用2.reduce 函数配合匿名函数使用3.reduce 函数设置可选参数 initial 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入…

标识符命名规则

规则&#xff1a;可以由大小写字母&#xff0c;下划线&#xff08;_&#xff09;&#xff0c;$组成&#xff0c;不能由数字&#xff0c;非法字符#&#xff0c;-&#xff0c;\等组成 比喻String 12abc"s"; String -a"d"; String #g"F"; 三者都…

BugkuCTF-Crypto题缝合加密

下载文件&#xff0c;打开 fence:栅栏 看组成规律&#xff0c;很明显和键盘有关系&#xff0c;但是第一租的qwedc既不能组成一个字母或数字&#xff0c;也没有围住一个字母或者数字&#xff0c;但是结合前面提到的pig&#xff0c;推测这里是猪圈密码 第一组的qwedc对应的是 …

Python locals 函数 - Python零基础入门教程

目录 一.locals 函数语法二.locals 函数使用三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.locals 函数语法 Python 内置函数 locals 比较简单&#xff0c;直接以字典 dict 的形式返回当前位置的所有局部变量&#xff0c;语法如下&…

数据类型方面

基本&#xff1a;byte&#xff08;1字节-128~127&#xff09;&#xff0c;short&#xff08;2&#xff09;&#xff0c;int&#xff08;4&#xff09;&#xff0c;long&#xff08;8&#xff09;&#xff0c;boolean&#xff08;1位&#xff09;&#xff0c;char&#xff08;2&…

腾讯员工用漫画自述悲惨职场经历,网友大呼:社会巨婴

最近微博上有几组“漫画”火了&#xff0c;但是却引发了巨大的争议&#xff0c;漫画作者微博昵称为“知春鹿可不这么想”&#xff0c;作者自称是腾讯的实习生&#xff0c;并通过漫画的形式描述着自己秋招、面试、实习等生活状态。这是其中一篇漫画。很多网友直接说出作者就是一…