我正在练习网站上玩,试图打败使用ANSI SQL模式的网站(使用单引号''(两个单一的刻度))来破解密码领域。我的目标是登录。我已经知道用户名了。
我在密码字段中尝试过多种组合,例如以下内容。我想我必须使用反斜杠的一些变体\但我已经困惑了很长一段时间。我将不胜感激,谢谢!
\'or'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文本行也会导致此问题。