Ⅰ 批量将不同压缩包中不同路径的相同格式文件提取出来,并放到单独文件夹的批处理命令如何写
我知道winrar的压缩软件可以通过添加 r参数来控制压缩和解压时遍历文件夹,如
rar a -u -ep -r 1.zip c:\temp\sc 可以遍历 c:\temp\sc 目录下的所有文件夹及子文件夹创建到压缩文件1.zip
同样,解压也可以用r参数,实现遍历压缩文件里面的目录。
压缩软件很多,但我觉得winrar这款软件在提供dos命令这方面做得比其他都好,你的看起来不是用winrar软件解压的,不过估计命令差不多,你可以试试添加r参数看看,即使用“7z e -r epub\%%i OEBPS\Text\*.xhtml”,如果不行,可以看你使用的解压缩软件的帮助文件,可能会找到你需要的参数,找不到的话可以改用winrar软件来处理。
如果不是对压缩文件内的内容进行遍历的话,之时想遍历某个文件夹下的所有文件及文件夹,则在dir命令后加上 /s 参数即可,即更改为for /f %%i in ('dir /s /b epub\*.epub') do
希望能解决你的问题,并让你获得启发,望采纳哟
Ⅱ [车联网安全自学篇] 四十六. Android安全之ZIP文件目录遍历漏洞
zip格式的压缩包文件允许包含 "../" 类型的字符串,以表示上一级目录。攻击者通过精心构造zip文件,利用多个 "../" 改变文件存放位置,可替换原有文件,如.so、.dex或.odex类型文件。这可能导致本地拒绝服务或任意代码执行漏洞,危害设备安全和信息。例如,寄生兽、海豚浏览器远程命令执行和三星默认输入法远程代码执行等著名事件。
在Linux系统中,"../" 代表切换到上一级目录。某些程序处理如"../../../../../../../../../../../etc/hosts"表示的文件时,会跳出当前工作目录,转至对应目录下的hosts文件。
Java代码在解压zip文件时,使用ZipEntry类的getName()方法获取文件名称。如果zip文件中包含 "../" 字符串,该方法返回值会原样返回,不进行过滤。在Android系统中,由于../代表回到上层目录,且解压工作在本应用内,应用可借助自身权限,通过构造恶意文件名如"../../../data/data/...",使解压文件到应用的沙盒中。
示例zip包包含:
- 直接修改请求的host和路径地址的中间人攻击方法
- 反编译APK为smali,修改请求地址对应的smali文件
- 动态加载代码前未做签名校验,利用目录穿越漏洞实现任意代码执行,甚至持久化攻击
在Android中,System.loadLibrary()从应用的lib目录加载.so文件,而System.load()使用绝对路径加载.so文件,可在SD卡或应用的files目录中,只要应用有读取权限即可。在files目录中,应用有写入权限,利用ZIP文件目录遍历漏洞替换.so文件,实现远程命令执行。
海豚浏览器的主题设置允许用户通过网络下载主题替换,通过中间人攻击修改主题zip包,可实现在海豚浏览器拥有权限的目录写入文件,替换关键文件,导致动态链接库libdolphin.so被覆盖。libdolphin.so没有放在应用数据的lib目录下,而是放在files目录中,增加了被覆盖的风险。
修复建议:
1. 对zip文件中路径进行验证和过滤,防止 "../" 导致的目录穿越。
2. 使用签名校验确保加载的.so文件来源安全。
3. 限制文件系统写入权限,特别是敏感目录。
4. 定期更新和维护系统以修复已知漏洞。
5. 对用户上传或下载的文件进行严格审查。