当前位置: 首页 > article >正文

(4)BUUCTF-web-[极客大挑战 2019]EasySQL1

前言:

觉得这个题目挺有意义的,因为最近在学数据库,但是不知道在现实中有什么应用,所以学起来也没有什么兴趣,做了这个题目,发现数据库还是挺有用处的,哈哈

知识点:

mysql 中and和or的优先级

()> and  >  or

sql="select * from DB where user_id=1 or user_name='张三' and birthday='2000-03-03'"

1.该条sql 表示从 DB 中查询出  user_id =1 或者 (user_name='张三' 并且 birthday='2000-03-03') 的数据

sql="select * from DB where (user_id=1 or user_name='张三') and birthday='2000-03-03'"

2.该条sql 表示查询表示(user_id =1 或者 user_name='张三')并且 birthday='2000-03-03')

 因为 () 的优先级会比 and 和 or 高  所以会先执行 ()里的
 

解题过程:

打开靶机后发现是一个登录界面,需要输入用户名和密码

先看看只输入用户民admin看看有什么报错

然后只输入密码也是同样的报错,所以用户名和密码都必须有值才能进行sql语句验证

判断是什么闭合

输入用户名admin'和admin

发现一个sql报错信息, 得知是''闭合

猜测后台的sql语句如下:

sql="select * from user where username='$username&'and password='$password&'"

然后使用万能密码看看能不能登录admin账户

payload:
用户名:admin
密码:admin' or 1=1# 

然后就出flag了

万能密码的原理是利用or和and的优先级来使得后面的where子句为真

我们输入的payload放入sql语句中就是这样的:

sql="select * from user where username='admin'and password='admin' or 1=1#'"

意思是:查询(用户名为admin并且password=admin)或者1=1的数据 #把后面的给注释掉了

因为1=1恒真,所以where子句后面恒真,所以就会输出所有用户的信息。

如果想只输出admin的信息可以使用:

payload:
用户名:admin ' or 1=1#
密码:admin

输入的payload放入sql语句中就是这样的:

sql="select * from user where username='admin' or 1=1#'and password='admin'" 

意思是:查询username=admin或者1=1,#把后面注释掉了,所以不用管。

这样就只会输出admin的信息。

 

 

 


http://www.kler.cn/a/144724.html

相关文章:

  • 淘宝商品详情接口,商品属性接口,商品信息查询,商品详细信息接口,h5详情,淘宝APP详情
  • ⑦【Redis GEO 】Redis常用数据类型:GEO [使用手册]
  • 基于51单片机的公交自动报站系统
  • Oracle 最终抛弃了 Sun !
  • Java枚举
  • ARM - AArch64 - 通用寄存器
  • Java数组的复制、截取(内含例题:力扣-189.轮转数组)
  • 什么是AWS CodeWhisperer?
  • Gin 学习笔记01-数据返回
  • 【从浅识到熟知Linux】基本指定之zip、unzip和tar
  • 芯能科技-603105 三季报分析(20231123)
  • 【Linux】指令详解(三)
  • AtCoder Beginner Contest 330 题解
  • 对全概率公式、贝叶斯公式的理解
  • 界面组件DevExpress Reporting v23.1 - Web报表设计器功能升级
  • 一文带你深入理解MySQL的三大连接方式:左连接、右连接和内连接!
  • c 语言中 unsigned int 类型的负数实际值大小
  • YOLOv8改进 | 2023 | FocusedLinearAttention实现有效涨点
  • vatee万腾科技先锋之选:vatee创新力驱动着未来发展
  • 无需公网IP,使用MCSM面板一键搭建我的世界Minecraft服务器联机游戏