web学习 --------admin(buuctf)

本文详细介绍了两种针对Web应用的安全漏洞利用方法:Unicode欺骗和Flask Session伪造。通过Unicode字符在Python中的转换,可以绕过特定字符串的比较。同时,文章揭示了Flask框架Session的加密机制,并提供了伪造Session的步骤。最后,提出了条件竞争的概念,作为另一种可能的攻击手段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

admin,虽然这道题弱口令过了,但是为了尊重出题人,还是走一波流程
解法一:Unicode欺骗
关键代码:

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

而在注册时使用了一次strlower,修改密码时使用了一次,
在这里插入图片描述在这里插入图片描述就是因为如此,所以有了Unicode欺骗,在python里测试一下,在此网站可找对应字符(https://unicode-table.com/en/search/?q=+%09Modifier+Letter+Capital+A)
使用如下脚本:

from twisted.words.protocols.jabber.xmpp_stringprep import nodeprep
def strlower(username):
    username = nodeprep.prepare(username)
    return username
print strlower(u'\u1d2c\u1d30\u1d39\u1d35\u1d3a')# ᴬᴰᴹᴵᴺ 的unicode编码为:\u1d2c\u1d30\u1d39\u1d35\u1d3a
print strlower(strlower(u'\u1d2c\u1d30\u1d39\u1d35\u1d3a'))

以上脚本的结果是ᴬᴰᴹᴵᴺ —>ADMIN----->admin
所以若是我们注册一个用户名为ᴬᴰᴹᴵᴺ的账户,进行了一次strlower,转成ADMIN,登录这个账户去修改密码,修改密码完成时用户名为admin,此时admin的密码就变成了我们修改的密码;

解法二:flask session伪造
这是flask是一大缺陷,不过官方已有补丁。
下来源码之后知道使用的flask框架,而flask对数据加密使用的是签名,由于flask并没有提供加密操作,所以其session的全部内容都是可以在客户端读取的,有了session,还需要签名才能进行加密,而签名可以在config.py中找到:
在这里插入图片描述解密代码:
注意:python2和python3使用的生成机制不一样,这道题python2生成的session不能进行加密,所以使用python3

#!/usr/bin/env python3
import sys
import zlib
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值