环境搭建:
登录页面:http://localhost:8081/WebInterface/login.html
默认账号密码crushadmin:password

漏洞分析:
loginCheckHeaderAuth负责检查和处理基于 HTTP 请求头中的认证信息(如 Authorization、Proxy-Authorization 和 as2-to)的用户登录逻辑。
AWV S3 身份验证通常使用请求签名机制,其中客户端Authorization类似以下格式
1 | Authorization: AWS4-HMAC-SHA256 Credential=<AccessKey>/<Date>/<Region>/s3/aws4_request, SignedHeaders=<Headers>, Signature=<Signature> |
该部分会获取以AWS4-HMAC开头,=字符后的值并去去除最后的/作为用户名,关键在于默认设置lookup_user_pass为true,然后调用login_user_pass方法验证用户名和密码。
crushftp.server.ServerSessionHTTP#loginCheckHeaderAuth

跟进该方法,anyPass参数为true,然后调用this.verify_user继续验证用户身份
crushftp.handlers.SessionCrush#login_user_pass(boolean, boolean, String, String)


跟进该方法,经过一系列对配置、用户名、拒绝默认账户、防暴力破解等处理,会新建临时账户并赋值然后调用UserTools.ut.verify_user方法检查
ServerStatus.thisObj:全局服务器状态。theUser/thePass:处理后的用户名和密码。anyPass:是否允许任意密码。
crushftp.handlers.SessionCrush#verify_user(String, String, boolean, boolean)

继续跟进,当anyPass为true且用户名存在就会返回tue,直接返回用户配置从而绕过。
crushftp.handlers.UserTools#verify_user(ServerStatus, String, String, String, SessionCrush, int, String, int, Properties, Properties, boolean)

漏洞复现:
1 | GET /WebInterface/function/?command=getUserInfo&c2f=9606 HTTP/1.1 |
