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

问题描述:

我正在练习网站上玩,并试图击败使用ANSI SQL模式的网站(使用''转义单引号'(两个单蜱))在密码字段。我的目标是登录。我已经知道用户名了。SQL注入:如何击败ANSI SQL模式(使用两个转义单引号)

我已经尝试了以下密码字段中的众多组合。我想我必须使用反斜杠的一些变体\,但我已经困惑了很长一段时间。我会感谢一些帮助,谢谢!

\'or'1'='1 
+0

有时间阅读这里的工作原理,并了解[测试工具](http://sqlmap.org)如何处理这些问题。 – tadman

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

有几个选项:

\' 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服务器的数量VERS。

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 /十六进制值,这是因为很多字符不映射回ASCII和译者并不总是干得好。

所以,最好的办法是尝试找回带有错误的SQL字符串的错误消息,然后从那里恢复出来。你不需要直接从SQL攻击开始,错误会告诉你很多你正在处理的事情。 如果您可以通过任何类型的错误确定版本,即使它不是转义,也可能会出现打印版本的SQL错误,您可以从中查找漏洞。有时极长的ASCII文本行也会导致此问题。

+0

所以我玩弄它,但我似乎无法得到有效的MySQL查询。假设我有SELECT * FROM CUSTOMERS WHERE'[INPUT]'。所以要打败这张使用双引号的表格,我正在考虑将\'或1 = 1转换为SELECT * FROM CUSTOMERS WHERE'\''或1 = 1,但我需要以某种方式将1 = 1放在文字中在单引号加倍的情况下 – MMM

+0

您是否首先找到导致错误的Unicode/Hex /转义字符?一旦找到可以跳过解析验证器的值,导致错误,这就是您开始构建注入攻击的方式。如果Unicode转换工作,那么它将是U + 0027或1 = 1 - – user1442498