[新手入门] 杂项中zip的总结

[复制链接]
查看3115 | 回复7 | 2018-8-18 10:18:02 | 显示全部楼层 |阅读模式
### 0x00:关于zip的一些基础知识
文件头:50 4B 03 04
50 4B 16进制ascii转字符后是zip格式文件创始人的名称的缩写P K
0x50 => P
0x4B => K

zip压缩后压缩包内每个文件都有一个CRC值,CRC值只和文件内容有关

### 0x01:用ZipCenOp破解伪加密
先切换到ZipCenOp.jar的目录,然后将zip伪加密的压缩包拷到同级目录下,然后执行下列命令后就可以正常解压了
```
java -jar ZipCenOp.jar r 11.zip
```

该工具除了破解伪加密,还可以将一个正常的压缩包进行伪加密
比如有一个1.zip压缩包
```
java -jar ZipCenOp.jar r 1.zip
```
如果想要试一下伪加密破解的,可以先用第二条命令对zip进行伪加密,然后再用第一条命令来解除伪加密
### 0x02:用Ziperello暴力破解zip压缩包
Ziperello的使用很简单
第一步选择待破解zip包,点击next
![]( qs2l1wl4jzq41fx7x560zirx80.jpg )

第二步选择破解方式
![]( ps0wss3lsoxenrhu67wdjzbp22.jpg )
一般选择字典破解,进去后选择字典,再设置好单词的变化就ok了
![]( 638wn3vmzba3v1yo7z0s4f3vrt.jpg )
然后点击开始破解:
![]( 1aiq3rfkrkhjj35qv9l2wewmi.jpg )

### 0x03:用AZPR实施已知明文攻击
利用前提:有一个zip中的文件
原理:同一个zip包里所有文件都是使用同一个加密密钥来加密的
![]( bqm92vhq6efxn9bpx60i767a7z.jpg )
比如我们有个aaa.zip文件,里面有个aaa.txt和flag.txt文件,我们想知道flag.txt文件的内容,但是压缩文件有密码
![]( g0gj1035umf2mqzd00pzaz5tma.jpg )
而如果我们现在已经有了aaa.txt文件,那么就可以通过ZAPR实施已知明文攻击得到压缩包密码
首先我们需要包aaa.txt压缩为zip文件aa.zip
然后打开AZPR
![]( jkfjdxgj73m78417sp78cxdh1t.jpg )
设置好了后点击start,然后等待一会儿密码就出来了
![]( gi1q0ztnnxfosa2m1w7ex8ywue.jpg )

### 0x04:CRC32碰撞攻击
由于压缩文件的CRC32值是根据文件内容来生成的,因此当文件内容比较简单的时候,我们可以通过爆破CRC32值来得到文件内容
比如我们新建一个文件a.txt,然后内容为9314,然后将其压缩加密(当然加不加密都无所谓,我们的目的是通过CRC直接爆破文件内容,而加密与不加密文件的CRC32值都是相同的)
![]( nhm4cydp7zctm1aacx8q3vxuyd.jpg )
a.txt的crc32值为0x6da3c0f9
再python中我们可以使用binascii模块很轻易的计算一个字符串的CRC32值
我们先定义一个得到字符串crc32值的函数,得到的值用十六进制表示:
```
import binascii
def getcrc32(str):
    return '0x%x' % (binascii.crc32(str)&0xffffffff)
```
如果我们知道文件内容为四位数字,那么我们可以调用这个函数来爆破
```
crc32 = "0x6da3c0f9"
for i in range(0, 9999):
    stri = str(i)
    if len(stri)<4:
        extr_len = 4-len(stri)
        stri = extr_len * "0"+stri # 补足4位
    if getcrc32(stri) == crc32:
        print stri
```
然后完整的脚本为:
```
#encoding:utf-8
import binascii
def getcrc32(str):
    return '0x%x' % (binascii.crc32(str)&0xffffffff)
crc32 = "0x6da3c0f9"
for i in range(0, 9999):
    stri = str(i)
    if len(stri)<4:
        extr_len = 4-len(stri)
        stri = extr_len * "0"+stri # 补足4位
    if getcrc32(stri) == crc32:
        print stri
```
运行结果:
![]( y8byvyzgq711n4ws1ktfodcygm.jpg )
成功爆破出了文件内容,当然crc32碰撞的使用局限性还是很大在现实环境中很难碰到
回复

使用道具 举报

singo | 2018-8-29 22:23:55 | 显示全部楼层
学习了  非常感谢
回复

使用道具 举报

alchemist | 2018-9-2 19:55:51 | 显示全部楼层
受教了,谢谢
回复

使用道具 举报

Free雅轩 | 2018-10-16 22:37:02 | 显示全部楼层
学习了,感谢分享
回复

使用道具 举报

Mr.轻熟男 | 2019-1-1 16:13:56 | 显示全部楼层
学习了~~~谢谢分享~~~
回复

使用道具 举报

dreamwind | 2019-4-22 13:59:46 | 显示全部楼层
好东西,歇息分享
回复

使用道具 举报

shrewdnoob | 2019-4-24 00:07:44 | 显示全部楼层
必须学习一波
回复

使用道具 举报

Oscar | 2019-4-25 19:58:40 | 显示全部楼层
小本子,记下来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1

主题

1

帖子

209

积分

炉火纯青

Rank: 4

积分
209