数据库注入 之 Oracle注入—报错注入

humbie   ·   发表于 2022-09-20 19:37:49   ·   学习杂记

Oracle很强大,很难搭,服务花钱,用法复杂。
风哥给出了一个Oracle线上执行语句工具
http://59.63.200.79:8808/index_x.php (好像坏了)
Oracle很死板,非常讲究语法格式。
dual 虚表,专门用来满足Oracle语法要求。
比如select 字段 from 表名
select user就不行,不满足格式,需要改为:
select user from dual (dual就是凑格式的)
Oracle的库被弱化,用户被强化(一个用户代表一个库)

select * from all_tables 获得所有表名
select * from user_tables 获得当前用户的所有表名
select * from all_tab_columns 查询出所有字段
select * from user_tab_columns 查询出当前用户的所有字段

limit是MySQL专属,其他都没有。

MSSQL一般用TOP分页
oracle用and rownum=1表示取第一条
rownum\)
2.别名法
数据库有别名(别名只能用于字段名,不能用于表)
select * from (select column_name,rownum n from user_tab_columns where table_name=’ADMIN’) where n=2
这样就可以了。
语句含义:子查询可以得到字段名的值和行号的数据比如aa 1 bb 2 cc 3两条数据,且把行号起个别名n。这样查n=2即可。
靶场:前面测试方法一样,注意字段用NULL,然后测试他是什么具体的类型(如同MSSQL)。
1970-01-01 08:00:00=>时间戳,指当时时间到此时间的秒数。
字段中有俩数字,俩不知道。
显错点在汉字,但是不知道是啥类型
方法:1.盲注
2.报错注入
3.转化类型(但是我们不知道啥类型)
4.通过函数对字符串处理让他变成数字。

本次课利用报错注入。
Oracle报错注入函数:CTXSYS.DRITHSX.SN(1,(select table_name from user_tables where rownum=1))
语句 :and 1=函数 (因为语法要求严格,所以要有1=)。这样就查出了table_name=’ADMIN’,想看第二条,就令其不等于’ADMIN’。

其他方法(百度)
数据类型转换在本题也可以。
处理字符串成数字,就是切割字符串,然后抓数字看回显。

新手学习套餐:PHP + MYSQL + JS + python
进阶套餐:Java + 三大数据库 + JS/node js + python/golang

打赏我,让我更有动力~

0 条回复   |  直到 2022-9-20 | 460 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.