CVE-2020-7245 CTFd v2.0.0 – v2.2.2漏洞分析复现

一、漏洞介绍

​ 在 CTFd v2.0.0 - v2.2.2 的注册过程中,如果知道用户名并在 CTFd 实例上启用电子邮件,则攻击者可以修改任意帐户的密码。

​ 漏洞影响范围

​ V2.0.0-V2.2.2

二、漏洞环境搭建

​ 在github上下载对应版本的CTFd,文件夹中有dockerfile,可以选择手动搭建,或者在docker中搭建。这里选择使用docker-compose来搭建,比较方便。

​ 输入

docker-compose up

​ 等待安装完成,之后访问ip:8000端口即可。

​ 注:

​ 如果过程太过漫长,建议修改 docker源,pip源,以及alpine源 至国内镜像源

​ docker源可以通过阿里云的 容器镜像服务控制台中的说明进行修改。(阿里云的说明还是挺棒的)

​ pip源如果不想永久修改,可以打开Dockerfile,修改它的命令达到临时修改的目的。

​

在两处命令后都加上-i https://mirrors.aliyun.com/pypi/simple/来临时指定下载地址

​ 安装过程中使用了alpine系统

依然通过修改Dockerfile来达到加速的目的

​

​ 修改 alpine的镜像源。

三、漏洞分析

​ 首先找到它注册部分的代码

def register():
errors = get_errors()
if request.method == 'POST':
name = request.form['name']
email_address = request.form['email']
password = request.form['password'] name_len = len(name) == 0
names = Users.query.add_columns('name', 'id').filter_by(name=name).first()
emails = Users.query.add_columns('email', 'id').filter_by(email=email_address).first()
pass_short = len(password) == 0

​ 可以看到 当我们通过POST发来注册请求的时候,其中的name参数并没有经过处理,而是直接被再次当作参数传入。

        else:
with app.app_context():
user = Users(
name=name.strip(),
email=email_address.lower(),
password=password.strip()
)

​ 当name通过了各种检查之后,即将存入时,使用了strip方法对name进行了处理。

这就意味着,如果我们在用户名的首尾添加上空格的时候,可以绕过用户名重复的检查

存入数据库之前空格会被删去,那么就会导致注册的用户名会和数据库中已有的重复。

​ 然后找到他的找回密码部分的代码

def reset_password(data=None):
if data is not None:
try:
name = unserialize(data, max_age=1800)
except (BadTimeSignature, SignatureExpired):
return render_template('reset_password.html', errors=['Your link has expired'])
except (BadSignature, TypeError, base64.binascii.Error):
return render_template('reset_paassword.html', errors=['Your reset token is invalid']) if request.method == "GET":
return render_template('reset_password.html', mode='set')
if request.method == "POST":
user = Users.query.filter_by(name=name).first_or_404()
user.password = request.form['password'].strip()
db.session.commit()
log('logins', format="[{date}] {ip} - successful password reset for {name}", name=name)
db.session.close()
return redirect(url_for('auth.login'))

​ 这里发现,会取出data,来找一下data是什么

def forgot_password(email, team_name):
token = serialize(team_name)
text = """Did you initiate a password reset? Click the following link to reset your password: {0}/{1} """.format(url_for('auth.reset_password', _external=True), token) sendmail(email, text) def verify_email_address(addr):
token = serialize(addr)
text = """Please click the following link to confirm your email address for {ctf_name}: {url}/{token}""".format(
ctf_name=get_config('ctf_name'),
url=url_for('auth.confirm', _external=True),
token=token
)
sendmail(addr, text)

​ 发现发到邮箱里的url是 {url}/{token}。

​ 到这里,漏洞的利用方式就大概出来了。

  • 首先注册一个用户名包含空格,默认的管理员是admin,那么就可以注册一个 admin。

  • 然后,退出登录,点重置密码。

  • 这时候邮箱里就会收到一个url,这个url后面拼接的token实际上是属于用户名admin的

  • 将自己注册的账号用户名修改成其他

  • 然后点开链接修改密码,admin的密码就被修改了

四、漏洞复现

  • 注册账号

    账号名字取为 "空格admin"

  • 退出登录,点击忘记密码

    输入邮箱

  • 修改用户名为其他
  • 点开邮箱中的链接

  • 重置成功

CVE-2020-7245 CTFd v2.0.0 – v2.2.2漏洞分析复现的更多相关文章

  1. thinkphp5.0.22远程代码执行漏洞分析及复现

    虽然网上已经有几篇公开的漏洞分析文章,但都是针对5.1版本的,而且看起来都比较抽象:我没有深入分析5.1版本,但看了下网上分析5.1版本漏洞的文章,发现虽然POC都是一样的,但它们的漏洞触发原因是不同 ...

  2. 【代码审计】五指CMS_v4.1.0 后台存在SQL注入漏洞分析

      0x00 环境准备 五指CMS官网:https://www.wuzhicms.com/ 网站源码版本:五指CMS v4.1.0 UTF-8 开源版 程序源码下载:https://www.wuzhi ...

  3. 【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析

      0x00 环境准备 JTBC(CMS)官网:http://www.jtbc.cn 网站源码版本:JTBC_CMS_PHP(3.0) 企业版 程序源码下载:http://download.jtbc. ...

  4. CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析

    漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc ...

  5. Joomla 3.0.0 - 3.4.6 RCE漏洞分析记录

    0x00  前言 今天早上看到了国内几家安全媒体发了Joomla RCE漏洞的预警,漏洞利用的EXP也在Github公开了.我大致看了一眼描述,觉得是个挺有意思的漏洞,因此有了这篇分析的文章,其实这个 ...

  6. PHPCMS v9.6.0 任意文件上传漏洞分析

    引用源:http://paper.seebug.org/273/ 配置了php debug的环境,并且根据这篇文章把流程走了一遍,对phpstorm的debug熟练度+1(跟pycharm一样) 用户 ...

  7. 【代码审计】YUNUCMS_v1.0.6 后台代码执行漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.yunucms.com 网站源码版本:YUNUCMSv1.0.6 程序源码下载:http://www.yunucms.com/Downl ...

  8. 【代码审计】711cms_V1.0.5前台XSS跨站脚本漏洞分析

      0x00 环境准备 711CMS官网: https://www.711cms.com/ 网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20) 程序源码下载:https: ...

  9. GLPI 0.85.5 上传漏洞分析

    在exp-db上面看到的漏洞,这是原文链接:https://www.exploit-db.com/exploits/38407/ 但是POC给的很简单,这是原来的描述: " The appl ...

随机推荐

  1. 9.数据分组 group by

    --数据分组 group by --作用:用于 对查询的数据进行分组,并处理 select deptno,job from emp group by deptno,job --1.分组之后,不能将除分 ...

  2. 三、linux-mysql mysql的多实例

    1.什么是mysql多实例 一个机器开通多个端口,运行多个mysql服务器进程,这些服务进程通过不同的socket监听不同的服务端口提供各自的服务,但它们共用一台mysql安装程序,使用不同的my.c ...

  3. SAP PM:参考维护工单创建测量凭证

    (1)使用FM:CO_BC_ORDER_POST获取工单资料(Aufnr, aufpo and materials etc): (2)使用FM:MEASUREM_DOCUM_RFC_SINGLE_00 ...

  4. 极简配置,业务上云只需 3min

    为了简化账号配置环节,实现本地一键开发部署,Serverless Framework 发布了微信扫码一键登录能力,支持用户在 Serverless Framework 环境扫码注册登陆,用户无需登录控 ...

  5. PAT甲级——1027 Colors in Mars

    1027 Colors in Mars People in Mars represent the colors in their computers in a similar way as the E ...

  6. DjangoBlog部署教程

    本篇文章将会手把手教你如何部署DjangoBlog项目,首先介绍下我这里的基本环境,请大家仔细阅读此部分,下面的教程都会使用这些约定来介绍: 系统是ubuntu 18.04 LTS 假设你的域名是ww ...

  7. Spring的分模块开发的配置

    参考:Spring学习笔记-Spring的分模块开发的配置 在加载配置文件的时候,加载多个 例如把applicationContext.xml配置文件中的关于集合配置的部分剪切到application ...

  8. fscanf使用心得

    好久没碰C语言了.从现在开始,要开始刷题了. (1)int fscanf( FILE* stream, const char* format, ... ); https://www.programiz ...

  9. [LC] 8. String to Integer (atoi)

    Implement atoi which converts a string to an integer. The function first discards as many whitespace ...

  10. “冰桶挑战”之外:微软科技助力ALS患者

    编者按:"直到ALS出现治疗方法,科技就是我的解药."ALS患者,前美国橄榄球联盟(NFL)球员Steve Gleason如是说.最近,一支微软首届黑客马拉松(Hackathon) ...