SQL注入:如何打败ANSI SQL模式(用两个转义单引号)

时间:2017-10-08 20:34:27

标签: mysql sql sql-injection

我正在练习网站上玩,试图打败使用ANSI SQL模式的网站(使用单引号''(两个单一的刻度))来破解密码领域。我的目标是登录。我已经知道用户名了。

我在密码字段中尝试过多种组合,例如以下内容。我想我必须使用反斜杠的一些变体\但我已经困惑了很长一段时间。我将不胜感激,谢谢!

\'or'1'='1

1 个答案:

答案 0 :(得分:2)

如果它是可利用的,你必须找出应用程序层将忽略的适当转义字符,但数据库不会。

有几个选择:

\'  This is a single escaped quote, that presents as a literal instead of a transalation.
''  This is another way of escaping quotes, depending on the sql generator,
though since you have an engine that doubles quotes, this would end up being ''''
\'' A literal quote escape quote is sometimes necessary to get through more than one layer of abstraction
\\' May pass on a double quote with the escaped \ generating an odd number of quotes

有时验证解析器容易受到某些字符的影响,因为它们使用正则表达式或文字查找器,但不考虑不同类型的字符,因此您可以选择解析器不会继续使用但不会中断的内容SQL

\t \n Playing around with spaces that might not be recognized might allow 
you to hide your attack string from the quote doubler.
-- /**/  These are sql comments that could disrupt the validator.

一些SQL解析器会将Unicode,html代码,十六进制或其他字符格式转换为ASCII以供执行,这些可以在令人惊讶且不幸的SQL服务器上运行。

U+02BC is a apostrophe modifier that can translate to a simple apostrophe
U+0027 is the Unicode for an apostrophe
' is the html code for an apostrophe.

有许多不同的unicode / html / hex值可能被转换为转义或单引号字符,这是因为许多字符不会映射回ASCII并且译者并不总是做得很好

因此,最好的办法是尝试使用错误的sql字符串返回错误消息,然后从那里构建回来。您不需要直接从SQL攻击开始,错误会告诉您很多关于您正在处理的内容。  如果您可以通过任何类型的错误确定版本,即使它不是转义,您也许可以获得打印版本的SQL错误,您可以为其查找漏洞。有时,极长的ASCII文本行也会导致此问题。