返回列表 发帖

[讨论]关于ASP中在线解压缩rar文件的讨论~!望积极参与~!

以下是从网上找来的代码,似乎存在明显的安全隐患~!
个人认为,自己写个DLL来解压比较好。但不知道unrar.dll都有些什么函数可调用,望明白人指点。
先谢为敬~!
要想实现这种功能,首先要得到Rar程序的解压缩核心文件支持(可以下载WinRar软件,再把其中的WinRar.exe文件单独“拿”出来。),并且还需要Windows操作系统自带的cmd.exe程序(这个程序用来执行WinRar.exe文件。操作系统自带的,NT内核的操作系统可以在操作系统安装目录下的System32文件夹下找到它;Windows 9X的操作系统可以在操作系统安装目录下的System文件夹下找到它。),如图1。然后把它们上传到同一目录中。建立asp文件,见以下代码:
  1. <%
  2. Dim a,b,Main,Shell,Runing,Runcode,Cmd,comm,fso
  3. Main="d:\chencheng\rar\" `上传后Winrar.exe和cmd.exe后的路径。
  4. a=Server.mappath("rar")&"\" ';解压rar文件后的存放路径。
  5. b=Server.mappath("rar\homepage.rar") ';要解压的rar文件,把其中homepage.rar修改为需要解压缩的文件。
  6. Set Shell = Server.CreateObject("WScript.Shell")
  7. Runing= "d:\chencheng\rar\cmd.exe /c "&Main&"Winrar.exe x -t -o+ -p- " ’设置运行解压缩的命令。
  8. Cmd=Run&b&" "&a
  9. Runcode = Shell.Run(Cmd,1, True)
  10. %>
复制代码

[讨论]关于ASP中在线解压缩rar文件的讨论~!望积极参与~!

[这个贴子最后由chinanic在 2007/01/24 01:13pm 第 1 次编辑] 自己折腾了一下,把winrar的rar.exe小小的利用了一把。]
  1. Upfiles.asp
  2. <%
  3. Dim sFileName,sUnFilePath,ReNum
  4. ';取得当前文件所在路径
  5. sFilePath=Request.ServerVariables("PATH_TRANSLATED")
  6. ';去掉后面的文件名得到真正的路径
  7. sFilePath=Left(sFilePath,Len(sFilePath)-InstrRev(sFilePath,"\"))
  8. ';加上上传文件名
  9. sFileName=sFilePath & "UploadFiles\aaa.rar"
  10. ';解压缩路径
  11. sUnFilePath=sFilePath & "UploadFiles"
  12. ';调用组件
  13. Set UR=Server.CreateObject("AMS.UnRar")
  14. ReNum=UR.UnRarFuc(sFileName,sUnFilePath)
  15. ';返回值判断
  16. if ReNum=0 then
  17. Response.write "解压失败~!"
  18. else
  19. Response.write "解压成功~!"
  20. End if
  21. %>
复制代码
打开VB,新建工程AMS,添加类模块UnRar,代码如下 咳,记得把rar.exe拷到D盘根目录(什么?你只有一个C盘。。我!·#!·#!·##¥#·¥·#)
  1. Function UnRarFuc(ByVal sFileName As String, ByVal sUnFilePath As String) As Integer
  2. Dim ReNum As Integer, strExec As String
  3. strExec = "D:\rar.exe e " & sFileName & " " & sUnFilePath
  4. ReNum = Shell(strExec)
  5. UnRarFuc = ReNum
  6. End Function
复制代码

TOP

[讨论]关于ASP中在线解压缩rar文件的讨论~!望积极参与~!

[这个贴子最后由chinanic在 2007/01/23 08:28pm 第 2 次编辑]

咳,再补充一点。站点不能给程序文件的执行权限,只要给rar.exe一个Everyone执行权限即可。。否则就会出现Invalid procedure call or argument 错误。
嗯。这样一来比网上的那什么用WSH执行CMD调用WINRAR.exe的貌似要安全一点。。
偶这只不过是烂砖一块,期待美玉中。。。

TOP

[讨论]关于ASP中在线解压缩rar文件的讨论~!望积极参与~!

刚开到这篇贴~~楼主发现问题的目光真是敏锐啊~~先敬佩下~~不过还是可能存在安全问题的~~呵呵~~这个在线运行rar的程序还可以这样利用~~貌似rar的溢出问题,构造个执行代码的rar~~然后让在线解压~如果winrar版本不够新的话用楼主的改版貌似还是可以拿到权限~~这样似乎牵扯出这类型程序一个通性。

TOP

[讨论]关于ASP中在线解压缩rar文件的讨论~!望积极参与~!

蛙蛙,网上公布的那个溢出漏洞是针对GUI界面的WINRAR的。并且是2.9版。。。嘿嘿。。
不过谁能保证后面的版本没漏洞呢~!
在发现后及时换就行了。。:16:

TOP

[讨论]关于ASP中在线解压缩rar文件的讨论~!望积极参与~!

不对吧,权限是"继承"的,而那个rar.exe本身的权限只是Everyone

TOP

[讨论]关于ASP中在线解压缩rar文件的讨论~!望积极参与~!

发一段JSP用ZIP实现在线压缩
看看能否抛砖引玉
  1. //zip zhe folder
  2. void zip(String zipPath, String srcPath,javax.servlet.jsp.JspWriter out) throws Exception {
  3.     FileOutputStream output = null;
  4.     ZipOutputStream zipOutput = null;
  5.     try{
  6.         output = new FileOutputStream(zipPath);
  7.         zipOutput = new ZipOutputStream(output);
  8.         zipEntry(zipOutput,srcPath,srcPath,zipPath);
  9.     }catch(Exception e){
  10.         out.print("file zip error");
  11.     }finally{
  12.         if(zipOutput!=null)zipOutput.close();
  13.     }
  14.     out.print("zip ok"+zipPath);
  15. }
  16. //add the zip entry
  17. void zipEntry(ZipOutputStream zipOs, String initPath,String filePath,String zipPath) throws Exception {
  18.     String entryName = filePath;
  19.     File f = new File(filePath);
  20.     if (f.isDirectory()){// ??
  21.         String[] files = f.list();
  22.         for(int i = 0; i < files.length; i++)
  23.             zipEntry(zipOs, initPath, filePath + File.separator + files[i],zipPath);
  24.         return;
  25.     }
  26.     String chPh = initPath.substring(initPath.lastIndexOf("/") + 1);// ?????
  27.     int idx=initPath.lastIndexOf(chPh);
  28.     if (idx != -1) {
  29.         entryName = filePath.substring(idx);
  30.     }
  31.     ZipEntry entry;
  32.     entry = new ZipEntry(entryName);
  33.     File ff = new File(filePath);
  34.     if(ff.getAbsolutePath().equals(zipPath))return;
  35.     entry.setSize(ff.length());
  36.     entry.setTime(ff.lastModified());
  37.     //the CRC efficacy  
  38.     entry.setCrc(0);
  39.     CRC32 crc = new CRC32();
  40.     crc.reset();
  41.     zipOs.putNextEntry(entry);
  42.     int len = 0;
  43.     byte[] buffer = new byte[2048];
  44.     int bufferLen = 2048;
  45.     FileInputStream input =null;
  46.     try{
  47.         input = new FileInputStream(filePath);
  48.         while ((len = input.read(buffer, 0, bufferLen)) != -1) {
  49.                 zipOs.write(buffer, 0, len);
  50.                 crc.update(buffer, 0, len);
  51.         }
  52.     }catch(Exception e){
  53.     }finally{
  54.         if(input!=null)input.close();
  55.     }
  56.     entry.setCrc(crc.getValue());
  57. }
复制代码

TOP

[讨论]关于ASP中在线解压缩rar文件的讨论~!望积极参与~!

下面引用由d#amnyou2007/02/20 02:03am 发表的内容:
不对吧,权限是"继承"的,而那个rar.exe本身的权限只是Everyone

偶的磁盘一般都只保留system和Adminstrators。。。嘿嘿
风之子的的确是美玉一块。。。。 :20: 可怜偶不懂。。

TOP

[讨论]关于ASP中在线解压缩rar文件的讨论~!望积极参与~!

呵呵
帮不上,抱歉。。

TOP

返回列表 回复 发帖