Ctfnoob01-换行符

跨平台换行符差异导致的密码破解失败

在进行密码破解任务时,我遇到了一个典型但容易被忽视的问题:不同操作系统间的换行符差异。在这篇博客中,我将分享我的经验和解决方案,希望能帮助那些可能面临同样挑战的人。

背景

在 Windows 系统上生成了一个用于密码破解的字典文件,文件中的换行符遵循 Windows 的标准,即 CRLF (\r\n)。然而,我的破解工具运行在 WSL 环境中,该环境以及大多数 Linux 工具期望的换行符是 LF (\n)。

我确定字典中有正确密码。当使用 VSCode 的 WSL 终端运行如下fcrackzip命令时,破解尝试失败了

1
fcrackzip -D -p ./vspro/passwords.txt -u flag.zip

通过file命令检查字典文件,确认了问题所在:

1
2
➜  code file ./vspro/passwords.txt
./vspro/passwords.txt: ASCII text, with CRLF line terminators

这表明文件是用 CRLF 作为换行符的,而不是 WSL 和 Linux 工具期望的 LF

解决方案

If conditions permit

在 linux 环境中使用脚本生成字典。

Else 使用指令转换换行符

为了解决这个问题,我需要将字典文件中的 CRLF 换行符转换为LF。Linux和WSL提供了一个非常方便的工具dos2unix,它可以实现这种转换。

1
sudo apt update && sudo apt install dos2unix

安装完成后,使用dos2unix命令转换文件:

1
dos2unix ./vspro/passwords.txt

验证转换

转换完成后,再次使用file命令验证文件的换行符:

1
2
➜  code file ./vspro/passwords.txt
./vspro/passwords.txt: ASCII text

这次,文件描述不再提到CRLF换行符,说明转换成功。

重新尝试破解

转换换行符后,我再次运行了fcrackzip命令,这次成功破解了ZIP文件的密码。