可以在 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'; --
Relevant 和
Some more
我正在学习 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'; --
Relevant 和
Some more