多种数据库注入复线-墨者学院SQL手工注入漏洞测试(Oracle数据库)

发布时间 2023-05-24 20:20:35作者: IwakuraLain

SQL手工注入漏洞测试(Oracle数据库)

fig:

1. 判断注入点

fig:

fig:

判断注入类型为数字型

fig:

fig:

2. 用order by获取列数

2时正常,3时报错,得到列数为2

fig:

fig:

3. 联合查询获取占位符

常规联合查询报错

fig:

这是由于oracle数据库语法十分严格,在后面需要指定数据表和准确的字符类型

我们使用dual表,dual 是oracle中的一个实际存在的表,任何用户均可读取

并使用null测试字符类型

fig:

测试结果如下,取得占位

fig:

4. 获取表名

构造语句select table_name from user_tables where rownum=1,获取到了第一张表

user_tables:查询oracle中所有的用户表,也可以使用all_tables获取所有表
rownum:每次只能显示一条数据

fig:

这显然不是所需要的,我们需要的是admin或者user,而经过测试得到admin并不存在

我们可以通过and table_name not in ('LOGMNR_SESSION_EVOLVE$')得到第二张表,第三张往后以此类推

fig:

但为了方便,可以构造语句,指定关键词进行模糊查询

select table_name from user_tables where rownum=1 and table_name like '%user%',得到如下:

fig:

sns_users是我们需要的

5. 获取列名

构造语句select column_name from all_tab_columns where rownum=1 and table_name = 'sns_users'

获取到了第一个列名USER_NAME

all_tab_columns:获取系统中所有表和列的信息

fig:

通过and column_name not in ('USER_NAME')获取到第二张表,往后以此类推

这里获取到了name和pwd就够了

fig:

6. 获取数据

前面我们获得了字段USER_NAME和USER_PWD,以及表名sns_users

通过union select user_name,user_pwd from "sns_users"直接获取数据

fig:

但是得到的这个账户hu,密码无法被md5解密,也不是实际的密码

fig:

fig:

此时需要换一个账户,构造语句where USER_NAME<>'hu'

<>等同于not in

fig:

得到账户mozhe和md5加密后的密码,解密后为967079

登录后台,获得flag为mozheca7f11f588329d180ee1591be80

fig: