PHPass 哈希与 Hashcat 模式 400
PHPass 是很多 PHP 应用使用过的密码哈希方案。常见特征是哈希以 $P$ 或 $H$ 开头,例如:
$P$BuyKfLj9xZ0iLez6SomJNOLGx.7g.U/
在靶场中,一旦通过 LFI、WebShell、备份文件或数据库泄露拿到用户表,就可以离线尝试破解这类哈希。
识别方法
| 特征 | 含义 |
|---|---|
$P$ | PHPass portable hash |
$H$ | phpBB / PHPass 变体 |
| 长度约 34 字符 | 常见 PHPass 字符串长度 |
数据库字段名 password | 常见于 Typecho、WordPress 等 PHP 应用 |
Hashcat 模式
PHPass 对应 Hashcat 模式:
-m 400
最小命令:
hashcat -m 400 hashes.txt /usr/share/wordlists/rockyou.txt
hashcat -m 400 --show hashes.txt
如果 rockyou 是 gzip 压缩包,也可以直接管道输入:
zcat /usr/share/wordlists/rockyou.txt.gz | hashcat -m 400 hashes.txt --force
hashcat -m 400 --show hashes.txt
单哈希复现
echo '$P$BuyKfLj9xZ0iLez6SomJNOLGx.7g.U/' > phpass.txt
zcat /usr/share/wordlists/rockyou.txt.gz | hashcat -m 400 phpass.txt --force
hashcat -m 400 --show phpass.txt
输出示例:
$P$BuyKfLj9xZ0iLez6SomJNOLGx.7g.U/:2boobies
取证位置
| 应用 | 常见位置 |
|---|---|
| Typecho SQLite | typecho_users.password |
| Typecho MySQL | typecho_users.password |
| WordPress | wp_users.user_pass |
| 备份数据库 | .sql、.db、.bak、.sqlite |
防坑点
- PHPass 不是 MD5,不能用
-m 0。 - 哈希里的
$需要用单引号保护,避免被 Shell 当变量展开。 - Web 用户密码破解后,不一定只能登录后台,也要尝试 SSH、FTP、数据库和复用场景。
- 破解失败时,先确认哈希是否完整,数据库导出是否被截断。
防御建议
- 不要把数据库文件、SQL 备份、SQLite 文件放在 Web 可读目录。
- WebShell 或 LFI 事件后,应视为用户哈希已经泄露,立即轮换密码。
- 对后台和 SSH 使用不同密码,避免哈希破解后横向移动。
- 使用现代密码哈希方案,并设置足够强的用户密码策略。
来源案例
- HackMyVM Type:通过 Typecho 主题 WebShell 下载 SQLite 数据库,破解
plugugly的 PHPass 哈希后 SSH 登录。