千家信息网

Oracle数据库实现SQL注入模拟与恢复

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,本篇内容主要讲解"Oracle数据库实现SQL注入模拟与恢复",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Oracle数据库实现SQL注入模拟与恢复"吧!
千家信息网最后更新 2024年11月23日Oracle数据库实现SQL注入模拟与恢复

本篇内容主要讲解"Oracle数据库实现SQL注入模拟与恢复",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Oracle数据库实现SQL注入模拟与恢复"吧!


1. Oracle SQL注入过程

1.1.SQL注入方式

从网上下载感染病毒的介质,在数据库实例创建时SQL注入脚本被执行并创建了相应的触发器和加密存储过程。这种注入方式由于在数据库实例创建时用SYS账号运行了被感染的脚本文件因此不需要依赖数据库中的DBA权限的用户。这种注入方式通过在$ORACLE_HOME/rdbms/admin下的prvtsupp.plb文件中添加一个加密的过程和一个触发器的创建脚本,在用户创建实例时会执行prvtsupp.plb该文件从而达到入侵的目的。通过对prvtsupp.plb文件中的过程进行解密后的内容如下:

另外一种注入方式就是网上下载了被病毒感染的PL/SQL或Toad客户端工具,如果用户登陆这些工具时使用具有dba权限的用户,则工具会在后台执行执行相应的病毒脚本并创建上面的过程和触发器。

1.1.SQL注入行为

该触发器在每次数据库重启后执行存储过程,而存储过程执行时会判断当前时间距数据库创建时间是否大于指定的天数 (我这次遇到的是300天),如果大于指定的天数则在数据库重启后将数据库字典基表TAB$备份后并清空。

在TAB$表被清空后如果数据库不再重启的话,数据库后台alert日志在报一系列ORA-00600后会一直会报错ORA-00604和ORA-00957


2. Oracle SQL注入过程模拟

模拟直接执行原加密的存储过程,如下:


执行存储过程后关闭数据库再次启动发现报错ORA-00600提示bootstrap核心对象损坏。

3. 应急修复过程测试

本次模拟修复采用shell脚本调用bbed批量修改tab$表对应的块,来恢复tab$表删除的记录。由于只修改了tab$对应的簇表块并没有修复索引(索引可以禁用,不建议修复)。所以在修复后只能通过exp将用户数据导出后进行重建数据库来恢复数据。

将受损的基表对应的SYSTEM表空间数据文件上传到linux平台执行相应的恢复脚本进行恢复如下:








修复完成后将文件拷贝回windows平台,然后启动数据库(建议以read only方式打开数据库,我这里是测试环境懒的执行了)

导出对应的用户数据


4. 日常预检查、处理

对于生产库建议定期进行病毒特征排查,如何及时发现并且数据库没有重启且select * form tab$查询不为空,则可以通过手动drop对应的存储过程和触发器(通过以下语句来检查数据库是否已感染相应的SQL注入病毒)。

select 'drop ' || object_type || ' ' || owner || '.' || object_name || ';'

from dba_objects

where object_name in ('DBMS_SUPPORT_DBMONITOR', 'DBMS_SUPPORT_DBMONITORP');

其次可以对用同版本数据库正常的prvtsupp.plb文件来替换$ORACLE_HOME/rdbms/admin/prvtsupp.plb感染病毒的文件,防止后续数据库新建议实例时再次感染病毒。

到此,相信大家对"Oracle数据库实现SQL注入模拟与恢复"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0