网络安全 频道

Java applet 安全性探究

  第二部分 尝试操作文件

  所谓的危险性操作,在applet的执行环境下可能发生的有:

  读文件

  写文件

  执行

  跨域取东西

  跨域通知

  跨域建立socket链接

  调用外部引擎(JDBC等)

  调用APPLET外的JAVA代码

  控制浏览器做一些不合理动作

  等等。

  发用户机器上的文件给某人,不错的想法,但是这里涉及两个基本权限:读文件,上传文件。上一篇里,因为权限问题,写文件的时候断电了。试想毕竟是JAVA,一门庞大的语言,真的无懈可击么?这次我们读个东西试试。

  Start代码:

File f = new File("c:/a.txt");
if (f.exists())System.out.println("可以读撒");

  控制台打印出:

java.security.AccessControlException: access denied (java.io.FilePermission c:\a.txt read)

  不能读文件,连最基本的“判断文件是否存在”都过不去。
  读都不行,更别说执行了?

Runtime runtime = Runtime.getRuntime();
Process process
= runtime.exec("format d:");

  控制台打印出:
 

java.security.AccessControlException: access denied (java.io.FilePermission C:\windows\system32\Client.exe execute)

  不能执行,文件相关操作都控制的死死的。好吧,我不奢求直接用java控制文件了。记得在玩注入时,可以调用ACCESS等数据库的引擎去写文件。如果可以在applet中访问数据库,那有意思了,一样可以做些什么。间接访问文件,只要没有控制applet访问JDBC驱动的权限,就能执行sql。

Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
conn
=DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=C:/WINDOWS/system32/ias/dnary.mdb", strUserName, strPassword);
stmt
=conn.createStatement();

  再看看结果:

java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.jdbc.odbc)

  又是失败,也就是说,applet控制了访问其他packet中的内容,只准访问自己内定的包,外部驱动不能用。我所知道的方法基本上都测试了,或许还有,但是这个层面上,最具代表性的都试了,其他的(跨域发送socket包等等)就不拿出来一一说明了。

0
相关文章