mysql - 可以在 WHERE 中执行 UPDATE 子句吗?

标签 mysql sql sql-injection

我正在学习 SQL 注入(inject),并构建了一个没有 SQL 注入(inject)保护的 Web 应用程序(PHP + MYSQL(5.6))。

简而言之,我的网络应用程序使用

SELECT * FROM XXX.USER WHERE user_name='${USERNAME}' AND password='${PASSWORD}'

处理登录(如果该sql只返回1行,则登录成功)。

一开始,我发现输入USERNAME Sayakiss' -- 然后是我的SQL:

SELECT * FROM XXX.USER WHERE user_name='Sayakiss' -- ' AND password='${PASSWORD}'

通过这种方式,攻击者可以不用密码登录为 Sayakiss

然后我发现了一些更有趣的东西(select 子句可以在 if 函数中)——攻击者输入 USERNAME as

Sayakiss' and if((select ascii(mid(z,p,1)) from x.y limit n,1)=c,1,0) -- 

这可以检查znp位置字符的ascii x.y 是否等于 c

如果攻击者登录成功,那么他就知道字符的ascii等于c

所以攻击者可以通过枚举获取我数据库的所有内容!

现在我想知道,如何(如果可能的话)以类似的方式执行更新查询来写入数据库?

最佳答案

我相信是这样,攻击者可以进行更新,可能需要表名和字段才能正确运行。 我想查询应该是这样的
'Sayakiss'; UPDATE table_name SET field1=new-value1, field2=new-value2 WHERE user_name='Sayakiss'; -- RelevantSome more

关于mysql - 可以在 WHERE 中执行 UPDATE 子句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34193383/

相关文章:

sql - 按字段值连接 SQL 表

java - 使用 CrudRepository 将 ZonedDateTime 转换为 MySQL 时间戳

MySQL where IN from joined table

mysql - (MySQL) MPTT/嵌套集模型上的聚合函数

mysql - #1248 - 每个派生表都必须有自己的别名

sql - 有人可以向我解释一下这种 SQL 注入(inject)攻击吗?

sql - 将时间 23 :59:59. 999 添加到结束日期之间

sql - 从 SQL Server 中的文本中提取数字

php - 如何向 sqlmap 添加用户名和密码?

c# - 如何在从中选择的表发生变化的 ADO.NET 中安全地创建查询?