跳到主要内容

LessPass 无状态密码推导

LessPass 是一个无状态密码管理器。它不依赖本地密码库,而是根据固定输入参数确定性生成密码:只要 siteloginmaster passwordcounter 和字符集 profile 一致,任何机器上生成的结果都会一致。

在渗透测试里,LessPass 本身不是漏洞;真正的问题是 LessPass 输入参数泄露。如果前端 JavaScript、配置文件、备份文件或笔记里同时泄露了 siteloginmaster password 等关键字段,攻击者就可以离线生成目标密码。


关键输入参数

参数说明常见默认值
site站点名 / 服务名,是生成密码的输入之一目标域名或自定义名称
login登录用户名用户名或邮箱
master password主密码,最敏感的输入无默认值
counter密码轮换计数器1
length生成密码长度16
字符集是否包含小写、大写、数字、符号默认全开

默认情况下,LessPass CLI 会生成长度为 16 的密码,并启用小写、大写、数字和符号。参数不同,生成结果就不同。


安装与运行

Kali / Debian 推荐:临时 venv

Kali 新版本启用了 Python externally managed environment 保护,直接 python3 -m pip install --user lesspass 可能被拦截。靶场复现时,临时 venv 更干净:

python3 -m venv /tmp/lesspass-venv
/tmp/lesspass-venv/bin/python -m pip install --quiet lesspass
/tmp/lesspass-venv/bin/lesspass --help

清理:

rm -rf /tmp/lesspass-venv

pipx

如果系统已经安装 pipx,可以直接运行:

pipx run lesspass --help

pip 用户安装

普通 Python 环境可用:

python3 -m pip install --user lesspass
lesspass --help

常用命令

基础格式:

lesspass SITE LOGIN MASTER_PASSWORD

指定长度:

lesspass example.com alice 'MasterPasswordHere' --length 20

指定 counter:

lesspass example.com alice 'MasterPasswordHere' --counter 2

不使用符号:

lesspass example.com alice 'MasterPasswordHere' --no-symbols

只生成数字密码:

lesspass example.com alice 'MasterPasswordHere' -d --no-lowercase --no-uppercase --no-symbols --length 8

GameShell5 案例

GameShell5 中,前端静态资源泄露了 LessPass 所需的关键输入:

参数
siteshell-shockers.dsz
loginnoob
master passwordaBcDeFgHiJkLmNoP
counter1
length16
字符集小写 + 大写 + 数字 + 符号

用 PyPI 的 lesspass 包生成密码:

python3 -m venv /tmp/lesspass-venv
/tmp/lesspass-venv/bin/python -m pip install --quiet lesspass
/tmp/lesspass-venv/bin/lesspass "shell-shockers.dsz" "noob" "aBcDeFgHiJkLmNoP"

输出:

&"0isY/n~(=\G>Ui

随后可用于 SSH 初始访问:

sshpass -p '&"0isY/n~(=\G>Ui' ssh noob@192.168.1.110

完整过程见:HackMyVM GameShell5 通关记录


前端静态资源线索

LessPass 线索不一定直接写在 HTML 正文里。靶场中可以按这个顺序检查前端资源:

位置关注点
script.jssiteloginmasterPasscounter 等变量名
混淆 JavaScript本地执行后追加 JSON.stringify() 输出关键变量
style.cssdata URI 图片、注释、隐藏 class 名
图片 alpha 通道可能把提示文字藏在透明度通道里
robots.txt被禁止抓取的 JS / CSS 可能反而是提示

GameShell5 中,script.js 泄露了 LessPass 输入参数,style.css 内嵌的 data URI PNG 又通过 alpha 通道显示 LessPass 标志,两边合起来才完成线索闭环。


渗透测试判断思路

看到疑似 LessPass 参数时,可以按这个顺序判断:

  1. 字段是否同时出现 siteloginmaster password 或相似命名。
  2. 页面、CSS、图片隐写、注释或备份文件里是否出现 LessPass 标志。
  3. 目标是否使用默认参数:counter=1length=16、字符集全开。
  4. 生成结果是否能用于 SSH、Web 登录、后台登录或服务认证。
  5. 如果失败,尝试调整 site、用户名大小写、counter 和字符集。

LessPass 的特点是离线可验证:一旦输入参数完整,不需要在线爆破,也不需要碰撞密码。


防御建议

  1. 不要把 master password 或派生密码输入参数放在前端资源中。
  2. 不要在 JavaScript、CSS、HTML 注释、备份文件、日志或截图中泄露 LessPass profile。
  3. 如果主密码疑似泄露,应视为相关站点密码全部失效,立即轮换。
  4. 对管理后台、SSH、VPN 等入口启用 MFA,降低单一密码泄露的影响。
  5. 生产环境建议使用可审计、可轮换、可集中管理的密码库或密钥管理系统。

参考资料