[HCTF 2018]admin 1

网上学习了几种方法

方法一:弱口令爆破

先随便注册一个账号登录

查看一下各个页面的源代码,找到提示

可能需要登录一下admin账号

登录界面输入admin密码随便,抓包,发送给intruder,添加爆破位置

添加字典开始爆破

登录后展示flag

方法二:flask session伪造

同样再前端源代码中找到提示

去github上下载 

打开源码,找到index.html,发现确实是当为admin用户时就会输出flag

Flask 是一个轻量级的 Python Web 框架,用于快速开发 Web 应用程序和 API。它被称为“微框架”(Microframework),因为它核心简单且可扩展,不强制依赖特定的数据库、模板引擎或其他组件,开发者可以按需选择插件。

Flask 的 Session 存储在客户端 Cookie 中,Flask 默认将 session 数据(如用户登录状态、临时数据等)直接存储在客户端的浏览器 Cookie 里,而非服务端数据库。客户端可以自由查看或修改 Cookie 内容,存在被伪造或篡改的风险。

Flask 使用 HMAC(密钥散列算法)为 session 数据生成一个签名,并将签名与数据用 . 拼接后存入 Cookie。签名目的是防篡改:服务端收到 Cookie 后会重新计算签名,若数据被篡改(如用户手动修改 Cookie),签名验证会失败,Flask 会拒绝该请求。数据本身是明文(实际是 Base64 编码,可轻松解码还原),客户端可以完全读取 session 的内容(如 {'user_id': 123})。签名仅确保数据完整性,不保护隐私。

上边的意思是再浏览器中获取session后将其解密,修改其中内容再加密替换原有session,就能实现提权

解密脚本:

#!/usr/bin/env python3
import sys
import zlib
from base64 import b64decode
from flask.sessions import session_json_serializer
from itsdangerous import base64_decode
 
def decryption(payload):
    payload, sig = payload.rsplit(b'.', 1)
    payload, timestamp = payload.rsplit(b'.', 1)
 
    decompress = False
    if payload.startswith(b'.'):
        payload = payload[1:]
        decompress = True
 
    try:
        payload = base64_decode(payload)
    except Exception as e:
        raise Exception('Could not base64 decode the payload because of '
                         'an exception')
 
    if decompress:
        try:
            payload = zlib.decompress(payload)
        except Exception as e:
            raise Exception('Could not zlib decompress the payload before '
                             'decoding the payload')
 
    return session_json_serializer.loads(payload)
 
if __name__ == '__main__':
    print(decryption(sys.argv[1].encode()))   

运行 

修改name:1—>admin 

加密脚本:网上找的
https://github.com/noraj/flask-session-cookie-manager

伪造session还需要密钥。在config.py里面发现密钥为ckj123

 

放入session

 拿到flag

 方法三:Unicode欺骗

原文链接:BUUCTF | [HCTF 2018]admin - 东坡肉肉君 - 博客园

https://unicode-table.com/en/1D2E/ ,在这个网站上找字符。

1.先注册一个账号 :ᴬᴰᴹᴵᴺ,密码:456

2.修改密码:111,然后退出

3.用账号”admin“,密码:111成功登录

  大致的思路是:在注册的时候  ”ᴬᴰᴹᴵᴺ“ 经过strlower(),转成”ADMIN“ , 在修改密码的时候 ”ADMIN“经过strlower()变成”admin“ , 当我们再次退出登录的时候 ”admin“经过strlower()变成”admin“(没啥卵用,但是你已经知道了一个密码已知的”admin“,而且在index.html中可以看到只要session['name']=='admin',也就是只要用户名是’admin‘就可成功登录了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值