HCTF-2018-admin

[HCTF 2018]admin

1.题目:
2.过程:

又是学习dalao操作的一天:

一、flask session 伪造

image-20210223155455900

应该是要获取admin的账号……网页通过session识别用户的身份:

session是浏览器与服务器交互的会话,这个session可以来验证访问者的身份,大多数的session都是保存在服务器的,但是也有少部分是客户端session,如flask框架。

传统PHP中session都是被放在服务器中的,用户只是看到一串随机字符串,真正的session内容在服务器中,flask是一个python轻量级web框架,他的session存储在客户端的cookie字段中,为了防止session篡改,flask进行了一定的处理,代码存放在flask模块中sessions.py文件中。

flask session 的加解密需要一个secret-key:

image-20210223162658801

源码中的config文件中可以被找到

用 flask-session-cookie-manager 对cookie进行解密:

解密:

python flask_session_cookie_manager3.py decode -s SECRET_KEY -c “session”

加密:

python flask_session_cookie_manager3.py encode -s SECRET_KEY -t “未加密session”

image-20210223163102049

在index中:

image-20210223163300325

只验证了session中的’name’即可:

image-20210223163402723

修改cookie即可以admin身份登录获取flag……

二、Unicode欺骗

image-20210223171235841

在change页面可以清楚的看到,对获取到的name进行了小写处理。python中含有小写函数:lower()

这里用的是strlower:

image-20210223173046053

用到了nodeprepare.prepare,这个方法从Twisted库中导出:

image-20210223175220075

这里的Twisted版本很低,dalao怀疑这里有漏洞……搜索了一下相关内容:

https://engineering.atspotify.com/2013/06/18/creative-usernames/中记录了因为使用nodeprepare.prepare导致的一起漏洞。注册时, ‘ᴮᴵᴳᴮᴵᴿᴰ’经处理得到‘BIGBIRD’,就成功注册了‘BIGBIRD’账户,但在修改密码时,再次对name使用了nodeprepare.prepare。那么修改的账户就变成‘bigbird’,原来的bigbird账户的密码就被控制了。官方的原话为:

”We were relying on nodeprep.prepare being idempotent, and it wasn’t.“

转化为小写的函数原本应当是幂等的,但在这个特殊情况下,两次的结果是不同的。

https://news.ycombinator.com/item?id=5902506的讨论中:

image-20210223180727395

似乎是python的工作方式的改变破坏了Twisted库。

或许是因为某些原因导致不支持ᴮᴵᴳᴮᴵᴿᴰ字符,进行了强制的转换?到这里我仍不是很明白。Unicode同形字引起的安全问题中介绍了关于Unicode转ASCII的GitHub的漏洞,但不是ᴬᴰᴹᴵᴺ到ADMIN的转换。

我找到了Unicode的标准化处理:

unicodedata.normalize(form, unistr)

把一串UNICODE字符串转换为普通格式的字符串,具体格式支持NFC、NFKC、NFD和NFKD格式。

Unicode标准定义了四种规范化形式: Normalization Form D (NFD),Normalization Form KD (NFKD),Normalization Form C (NFC),和Normalization Form KC (NFKC)。大约来说,NFD和NFKD将可能的字符进行分解,而NFC和NFKC将可能的字符进行组合。

NFC(Normalization Form C)使用最少的码位构成等价的字符串;
NFD把组合字符分解成基字符和单独的组合字符;

在另外两个规范化形式(NFKC和NFKD)的首字母缩略词中,字母K表示“compatibility”(兼容性)。这两种是较严格的规范形式,对“兼容字符”有影响

=》https://blog.csdn.net/weixin_38492159/article/details/107135663

image-20210223210605583

NFKC和NFKD下,都会转换为ADMIN;NFC和NFD下,仍为ᴬᴰᴹᴵᴺ。

大概是该方法在遇到ᴬᴰᴹᴵᴺ时,因为某些原因只进行了规范化而没有转化为小写导致了漏洞吧……更深的就不知道了……

p大:https://www.leavesongs.com/PENETRATION/client-session-security.html

关于Unicode安全的好像有一道Unicode shop,回来可以写写。

三、条件竞争

……确实不是很懂,先贴dalao题解,学习学习:

https://blog.csdn.net/weixin_44677409/article/details/100733581

https://www.anquanke.com/post/id/164086

……wohaocai

作者

inanb

发布于

2021-02-23

更新于

2021-08-23

许可协议


:D 一言句子获取中...