web方向 [极客大挑战2019]EasySQL1

打开靶机界面,根据提示可以看出是一个有关SQL注入的题目

在随意输入几次用户名密码后发现会跳转到提示错误界面

我们使用经典的 SQL注入 攻击——万能密码

' OR 1=1#

    

使用和原理:

假设原始的查询语句是类似这样的:

SELECT * FROM users WHERE username = '输入的用户名' AND password = '输入的密码';

若在用户名或者密码上输入万能密码后后 查询会被替换为:

SELECT * FROM users WHERE username = '' OR 1=1#' AND password = '输入的密码';

或者

SELECT * FROM users WHERE username = '输入的用户名' AND password = '' OR 1=1 #';

AND 运算符的优先级高于 OR 运算符,所以按照标准的 SQL 语法,查询会先处理 AND 后处理 OR

因此,SQL 查询首先会像这样被理解:

SELECT * FROM users WHERE username = '' OR 1=1#' AND password = '输入的密码';

SELECT * FROM users WHERE (username = '输入的用户名' AND password = '') OR 1=1 #';

#:这是一个注释符号。在SQL语句中,# 会注释掉它后面的部分。

所以sql语句始终为真

为了防止SQL注入,开发人员可以采取以下措施:

  • 使用参数化查询(Prepared Statements:避免直接拼接用户输入到SQL查询语句中,使用占位符代替输入内容。这样可以有效防止恶意输入被当作SQL代码执行。

示例(使用参数化查询):

cursor.execute("SELECT * FROM users WHERE username = %s AND password = %s", (username, password))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值