| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> BUUCTF-[HCTF 2018]admin1 -> 正文阅读 |
|
[Python知识库]BUUCTF-[HCTF 2018]admin1 |
题目?? 分析打开环境,页面啥也没有,日常查看源代码 提示说你不是admin,所以这题可能是我们为admin才可以得到flag 在login页面找到登录框 刚开始以为是sql注入,直接万能密码;结果试了几种方法发现不是报错就是提示用户名密码错误 没有结果之后,去到register注册页面注册一个账户,在change password那里查看源码,可以看到有提示 去github上下载? 打开源码,找到index.html,发现确实是当为admin用户时就会输出flag 方法一 flask session 伪造原因是flask的session是存储在客户端的cookie中的即存储在本地,因此可以尝试进行伪造。且flask仅仅对session数据进行了签名。即通过hmac算法计算数据的签名,将签名附在数据后,用“.”分割。众所周知的是,签名的作用是防篡改,而无法防止被读取。而flask并没有提供加密操作,所以其session的全部内容都是可以在客户端读取的,即可以利用脚本可以解出session的内容 解密脚本
解密过程: 复制session 运行脚本解密? 可以看见这里解密之后有个 name值是我们的用户名,只要将123改成admin即可得到flag ?解密后的内容
破解出flag的内容不难,但是伪造session需要密钥。在config.py里面发现密钥为ckj123 ?加密脚本
下载到当前目录下或者直接去github自己下载 将解密后的内容中的123改成admin
加密
结果
将结果放到session里面刷新即可得到flag 方法二:Unicode欺骗注意在routes.py中 修改密码的这一段代码 在修改密码的时候先将name进行strlower处理一次,看名字意思是转为小写,但python中自带转小写函数lower()却没有用,跟进strlower函数看看是如何使用的;发现其使用的nodeprep.prepare(),而nodeprep是从Twisted模块导入的,在requirements.txt文件中发现 然后我们发现在使用nodeprep.prepare函数对于Modifier Letter Capital这些字母转换时过程如下:
同时我们在登录的时候也发现了strlower这个函数 那么我们的思路就明确了:
点这里(Modifier Letter Capital)可以找这些字母和他们的unicode码值 首先我们注册?????用户。然后用?????用户登录;因为在登录时login函数里使用了一次nodeprep.prepare函数,因此我们登录上去看到的用户名为ADMIN 此时我们点change password修改密码,在修改时就会再一次调用了一次nodeprep.prepare函数将ADMIN转换为admin,这样我们就可以改掉admin的密码,最后利用admin账号登录即可拿到flag。 方法三:条件竞争(不过实际没有成功,但理论是对的)上述代码表示,1、在登录时是直接将登陆表单中的用户名赋值给session['name'];且不需要密码是不是正确(需要用bp抓包,直接登录session里面只有一瞬间改变) 2、在修改密码的时候是直接将session['name']即用户名赋值给name,然后对name用户进行修改密码。未进行安全的身份验证,也就可能存在以下一种可能: 进程2一直以admin用户进行登录密码正确与否无所谓,此时会创建一个session,内容里面name=admin,即session['name']内容admin。 那么就会是不是有可能当进程1进行到改密码操作时,进程2恰好进行登录,此时进程1改密码需要一个session['name']赋值给name来判断是修改哪一个用户的密码,而进程2刚好将session[‘name’]赋值为admin,然后进程1调用此session修改密码,即修改了admin的密码。 不过网上的wp都说在实际测试并没有成功。不知道为什么(我也就不去测试了偷个懒hhh) python脚本
方法四:直接登录用户名admin的密码为123,登录即可 其他问题验证码能在session里面解密出来? 参考文章:一题三解之2018HCTF&admin - 安全客,安全资讯平台 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/31 6:23:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |