web buuctf [HCTF 2018]admin1

查看首页源代码,有注释

<!-- you are not admin -->

考虑这道题很有可能是用admin或者伪造admin进行登录,

用admin进行登录,随便填写密码进不去,发现页面有注册选项,用admin注册提示已经被注册

方法一:burp爆破

进入登录界面,用户名输admin,密码随便填,抓包对密码进行爆破;

 

爆破之后,提示429和302,可以看一下429的response,提示的是太多请求的问题,

更改options中的选项

控制数据量,我因为正好吃饭就调成300,很慢,大家可以自行调节,正常的返回结果就有一个payload的长度是不同的

 可以确定admin的密码是123,登录即可得到flag

 

方法2:

随便注册个账户,然后登录进页面,进行最简单的工作,逐个页面查看源代码,看有无有用的信息和漏洞,在change password页面下发现注释

 <!-- https://github.com/woadsl1234/hctf_flask/ -->

登录下载下来发现是网站的源码文件,打开\hctf_flask-master\app,先看里面的routes.py路由文件,逐个看一下,\hctf_flask-master\app\templates\index.html中

{% include('header.html') %}
{% if current_user.is_authenticated %}
<h1 class="nav">Hello {{ session['name'] }}</h1>
{% endif %}
{% if current_user.is_authenticated and session['name'] == 'admin' %}
<h1 class="nav">hctf{xxxxxxxxx}</h1>
{% endif %}
<!-- you are not admin -->
<h1 class="nav">Welcome to hctf</h1>

{% include('footer.html') %}

关于flask里面的session:

flask 是非常轻量级的 Web框架 ,其 session 存储在客户端中,也就是说其实只是将相关内容进行了加密保存到session中。和服务端的session不同,服务端的session保存在服务端中,依靠客户端cookie值中的sessionId来进行识别。

也就是说可以通过更改session里面的用户名为admin,便可实现伪造admin登录

通过burp抓取session,是一串码,需要进行解密

GitHub - noraj/flask-session-cookie-manager: Flask Session Cookie Decoder/Encoder

github上有flask-session的加解密代码,

因为我的电脑上安了python3和python2,所以安装flask的时候出了点问题,pip3 install flask确保代码执行没有问题

C:\Users\86155>python flask-session-cookie-manager-master\flask_session_cookie_manager3.py decode
usage: flask_session_cookie_manager3.py decode [-h] [-s <string>] -c <string>
flask_session_cookie_manager3.py decode: error: the following arguments are required: -c/--cookie-value

C:\Users\86155>python flask-session-cookie-manager-master\flask_session_cookie_manager3.py decode -h
usage: flask_session_cookie_manager3.py decode [-h] [-s <string>] -c <string>

optional arguments:
  -h, --help            show this help message and exit
  -s <string>, --secret-key <string>
                        Secret key
  -c <string>, --cookie-value <string>
                        Session cookie value

可以看到需要secret key和session cookie value两个参数

secret可以在\hctf_flask-master\app\config.py中看到 

class Config(object):
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'ckj123'
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:adsl1234@db:3306/test'
    SQLALCHEMY_TRACK_MODIFICATIONS = True

session value就是抓包所得,这里有一点session value的获得过程,首先,要用你已经注册的账号先登录进去,此时记录的session记录的用户名是你注册的名字,这时候再将获取的session更改,例如:登录change password,进行抓包,运行解密代码

C:\Users\86155>python flask-session-cookie-manager-master\flask_session_cookie_manager3.py decode -s "ckj123" -c ".eJw9kEGLwjAQhf_KMmcPbWwvgoddUkuFmaBEZXIRXWvbxLhQldWI_32jCx4f783Hm3eH9b6vTy2Mzv2lHsC628HoDh9bGAHrWc4rHqKcO9ZfllZVIFlkZDlHbxwFzjAcWiqnB7OaOlWajkSVoTWd0gtBfmoxLASLl86UjDm9dEYWCYXWYYlBldQ9OSSKgHY2jJmWtUuxXEYuefRVZqxLntrIJlGar_E-Z4E5WWNR71qjeQyPAXyf-v36_OPq4_sF1I3gsLSx8i3WOpB0VyXxl0WRcNQcOEVdDTGWxTC7YTl36nP8wnV-09Rv0tZPFDX_znHjowGbne-OMIDLqe5fu0GawuMPRadr_A.Yi2c_Q.litxhAuL4tDmrJkduha2BNut3I8"
{'_fresh': True, '_id': b'a49af704da0c5b34186692fd76839a4beebd8fb7b826b9566bc356cfb95882ee5dd1478d0c38cb7687a324782aa950ea4cf2b8f940ead84961d19cc966c17ae6', 'csrf_token': b'186c5c66226e491830ca4b6ec651273cf3420dd8', 'image': b'naN6', 'name': 'admin', 'user_id': '11'}

name字段为你登录的账户,根据要求要改成admin, 因为我已经做完了,所以我解密完之后还是admin,我就不改了,大家做的时候注意一点,再将改好的进行加密,encode -s "ckj123" -t "secret structure",

替换转发

 

方法3:unicode编码覆盖

在查看route.py代码中

@app.route('/register', methods = ['GET', 'POST'])
def register():

    if current_user.is_authenticated:
        return redirect(url_for('index'))

    form = RegisterForm()
    if request.method == 'POST':
        name = strlower(form.username.data)
        if session.get('image').lower() != form.verify_code.data.lower():
            flash('Wrong verify code.')
            return render_template('register.html', title = 'register', form=form)
        if User.query.filter_by(username = name).first():
            flash('The username has been registered')
            return redirect(url_for('register'))
        user = User(username=name)
        user.set_password(form.password.data)
        db.session.add(user)
        db.session.commit()
        flash('register successful')
        return redirect(url_for('login'))
    return render_template('register.html', title = 'register', form = form)

@app.route('/login', methods = ['GET', 'POST'])
def login():
    if current_user.is_authenticated:
        return redirect(url_for('index'))

    form = LoginForm()
    if request.method == 'POST':
        name = strlower(form.username.data)
        session['name'] = name
        user = User.query.filter_by(username=name).first()
        if user is None or not user.check_password(form.password.data):
            flash('Invalid username or password')
            return redirect(url_for('login'))
        login_user(user, remember=form.remember_me.data)
        return redirect(url_for('index'))
    return render_template('login.html', title = 'login', form = form)

def strlower(username):
    username = nodeprep.prepare(username)
    return username

 在login和register函数中,均对传参username进行了strlower处理,查看下面的函数,是对username调用函数nodeprep.prepare进行处理,unicode转化,而nodeprep是从Twisted模块导入的,在requirements.txt文件中发现Twisted==10.2.0,与最新版本差距很大,

注册和登录各调用了一次这个函数,我们倒着进行推算,要使传进去的值服务器识别成admin,

函数的作用是将大写转化为小写

但它同时会将unicode字符转换成A,而A再调用一次nodeprep.prepare函数会把A转换成a

也就是说我们可以使用ᴬdmin注册登录,登陆后再想办法让服务器再执行一次nodeprep.prepare,便可以变成admin账户

方法4:条件竞争

这种是理想状态下的解题方式,但是需要大量线程同时进行,精确度也无法控制和硬件关联性很强,而且如果数量很多也会报429

因为是flask框架,并发式运行会产生漏洞,当以session name=admin进行登录,login上的session name为admin,同时进行change函数,当session name=admin ,session保留的name为admin,执行change,就会调用session里的name,这样相当于给admin改了密码,这种更改条件性太强,现实的渗透很少能够用到,就不尝试了。

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: mall-admin-web-master 是一个商城管理系统的前端项目。该项目采用了现代化的前端技术栈,包括 Vue.js 框架、Element-UI 组件库等,以提供一个用户友好、功能强大的商城管理界面。 mall-admin-web-master 的主要功能包括用户管理、商品管理、订单管理以及数据统计等。用户管理模块可以对商城用户进行增删改查操作,包括用户信息、权限设置等。商品管理模块可以对商城商品进行管理,包括商品录入、编辑、上架、下架等操作。订单管理模块可以对商城订单进行管理,包括订单查询、订单发货、订单退款等操作。数据统计模块可以对商城的销售数据进行统计和分析,为商城经营提供参考依据。 mall-admin-web-master 还具备一些高级功能和技术特点。通过与后端 API 的交互,实现与商城后台的数据同步和交互。支持响应式布局,可以适配不同设备的屏幕尺寸,例如电脑、平板和手机。利用前端路由技术,实现了页面之间的无刷新切换以及浏览器的前进后退功能。同时,该项目还具备良好的代码结构和可扩展性,可以方便地进行二次开发和定制。 mall-admin-web-master 是一个非常实用的商城管理系统前端项目,通过它,商城管理员可以方便地进行各项管理操作,并获取有关商城经营情况的统计数据,为商城的运营提供支持和决策依据。 ### 回答2: mall-admin-web-master 是一个项目文件夹的名称,通常是指商城后台管理系统的前端代码。这个项目包含了商城后台管理系统所需的各种功能和页面,利用这些代码可以搭建起一个完整的商城后台管理系统。 mall-admin-web-master 的代码主要使用了前端开发技术,例如HTML、CSS和JavaScript等。通过这些技术,开发者可以创建出用户友好、美观且功能强大的商城后台管理页面。 商城后台管理系统是为了方便管理员管理商城运营而开发的一个系统。它包括了商品管理、订单管理、用户管理、数据统计分析等各种功能模块,通过使用这个系统,管理员可以方便地管理商城的运营和销售数据,提升工作效率。 mall-admin-web-master 的代码是为了实现上述功能而编写的,它通过与后端服务器进行交互,获取商城的数据,并将数据以友好的方式展示给管理员。同时,它还提供了各种操作界面,使管理员可以方便地对商城的各项运营进行管理。 总之,mall-admin-web-master 是一个商城后台管理系统的前端代码,通过它可以实现商城的后台管理功能,提升管理员的工作效率。 ### 回答3: mall-admin-web-master 是一个商场管理系统的前端项目,细分为商场管理系统的前端部分。该项目的主要功能是通过网页界面来实现商场的管理操作。具体来说,mall-admin-web-master 主要包括以下几个方面: 1. 登录注册模块:提供用户登录和注册功能,保证商场管理者可以安全地访问和操作系统。 2. 商场概述模块:展示商场的整体运营情况,包括当天的营业额、商品销售量等重要数据,帮助管理者了解商场的整体运营状况。 3. 商品管理模块:提供对商场内商品进行增删改查的功能,包括商品的添加、编辑、删除和查询等操作,方便管理者对商品进行全面的管理。 4. 订单管理模块:对商场内的订单进行管理,包括订单的查询、审核、发货等操作,帮助管理者实现对订单的有效管理,提高订单处理的效率。 5. 店铺管理模块:对商场内的店铺进行管理,包括店铺的添加、编辑、删除等操作,帮助管理者对店铺进行管理和布局。 6. 用户管理模块:对商场内的用户进行管理,包括用户的注册信息、下单记录、余额等进行管理,方便管理者对用户进行跟踪和统计。 总的来说,mall-admin-web-master 是一个功能丰富、操作简便的商场管理系统前端项目,能够帮助商场管理者有效地进行商场的管理和运营。其用户友好的界面设计和强大的功能模块,能够提高商场管理的效率和水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值