如何在sql注入期间识别列类型?

时间:2015-05-05 15:01:49

标签: oracle security sql-injection

情况如下:

我已经确定了sql注入攻击向量,并且有关于目标表的以下信息:

  • 它有六列。 (使用“order by”识别)。
  • 我可以看到其中3个的输出(显示表格)。两个似乎是枚举值(数据库中的整数?),一个是日期。我非常怀疑col#6是日期专栏。
  • 我几乎可以肯定数据库是oracle。 (ROWNUM工作,LIMIT给出错误)。
  • 我没有错误消息(总是返回通用文本 - “出错了”)。
  • 前端是PHP,如果重要的话。但是它和数据库之间可能存在中间层(例如java服务),所以我不确定查询的构建位置。

E.g。以下搜索查询按预期工作:

test' AND ROWNUM <= 5 ORDER BY 6--

EDIT-FROM-位置:

在评论帮助之后,确认以下查询有效:

test' UNION ALL SELECT null,null,null,null,null,null FROM dual--

(我失踪了FROM dual部分。非常感谢@kordirko!)

此查询在输出表中添加一条空记录(它在视觉上可见),所以我肯定是在正确的轨道上!

现在,以下行也有效:

test' UNION ALL SELECT null,null,null,n't',null,null FROM dual--

我正确识别了第4列,现在它显示大写(?)字母T,我希望它出现在那里。到现在为止还挺好。但是当我输入超过1个字符的任何字符串时,它会出错!所以下面给出了一个错误:

test' UNION ALL SELECT null,null,null,n'test',null,null FROM dual--

我不是SQL注入方面的专家,尤其是ORACLE(虽然有使用MsSql的经验)。

我认为这个问题与unicode-ansi-whateverencoding相关。对于其他行(在添加UNION ALL SELECT之前由原始查询选择),第4列提供多字符正常字符串。但是当我尝试注入所需的字符串时,只有当它是一个字符时它才有效,并且还会以大写字母显示它。我认为这必须是一些编码问题。我刚刚发现在搜索和挣扎1小时后我需要n前缀用于unicode字符串。也许一些Oracle大师可以很快发现我的查询中有什么错误?

0 个答案:

没有答案