Say*_*iss 5 mysql sql sql-injection
我正在学习 SQL 注入,并且构建了一个没有 SQL 注入保护的 Web 应用程序(PHP + MYSQL(5.6))。
简而言之,我的 Web 应用程序使用
SELECT * FROM XXX.USER WHERE user_name='${USERNAME}' AND password='${PASSWORD}'
Run Code Online (Sandbox Code Playgroud)
处理登录(如果该 sql 仅返回 1 行,则登录成功)。
一开始,我发现输入 USERNAMESayakiss' --然后我的 SQL:
SELECT * FROM XXX.USER WHERE user_name='Sayakiss' -- ' AND password='${PASSWORD}'
Run Code Online (Sandbox Code Playgroud)
通过这种方式,攻击者可以在Sayakiss没有密码的情况下登录。
然后我发现了一些更有趣的东西(select子句可以在if函数中)——攻击者输入 USERNAME 作为
Sayakiss' and if((select ascii(mid(z,p,1)) from x.y limit n,1)=c,1,0) --
Run Code Online (Sandbox Code Playgroud)
这可以检查字符表的列的第 -th 行p位置的字符的 ascii 是否相等。nzx.yc
如果攻击者登录成功,则他知道字符的 ascii 等于c。
所以攻击者可以通过枚举获取我数据库的所有内容!
现在我想知道,如何(如果可能的话)以类似的方式执行更新查询以写入数据库?