前言

这题的三种方法都是姿势盲区。。。。第三种方法只给个介绍。。因为好像复现的话不能成功,但是学习学习这种方法的思想。

姿势总结

  1. flask session伪造
  2. unicode欺骗
  3. 条件竞争

方法一:flask session伪造

我做题目的时候一直以为这题应该是SQL注入。。。在登录那里被卡了好久。。最后发现屁用都没有。。

首先!我们先注册一个再登录,在change password那里查看源码,可以看到有提示:

但是我并没有看到。。。这题也深深的教会了我,虽然页面可能有点多,源码还是要好好看看。。自己以后一定要注意这个,f12看源码的时候一定要仔细而且看全,一定不要漏掉了某个页面。
我们进入这个github,把文件下载下来,发现是flask模板。
然后就引入我们的第一种解法,flask session的伪造。因为flask的session是在客户端的,因此可以尝试进行伪造。破解不难,但是伪造需要密钥。正好密钥就在我们下载的文件夹里:

密钥是ckj123。因此可以进行伪造。
首先是解密,解密脚本如下:

#!/usr/bin/env python3
import sys
import zlib
from base64 import b64decode
from flask.sessions import session_json_serializer
from itsdangerous import base64_decodedef decryption(payload):payload, sig = payload.rsplit(b'.', 1)payload, timestamp = payload.rsplit(b'.', 1)decompress = Falseif payload.startswith(b'.'):payload = payload[1:]decompress = Truetry: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()))


把name改成admin,再进行加密。加密的脚本这样获取:

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

然后进行加密:

再利用伪造的session,成功登录admin账号:

方法二:Unicode欺骗

说实话真的是知识盲区。。。能想出来的大师傅真的是太强了叭。。

首先注意:

更改密码的里面有这样一句代码:

name = strlower(session['name'])

注意strlower:

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

这个nodeprep.prepare存在漏洞。我们还会发现,login的时候又strlower一次。这个本来是转小写的,但是如果我们注册的用户名是这个:
ᴬᴰᴹᴵᴺ
login的时候会经过一次strlower会编程ADMIN,在change password的时候会变成admin。因此可以更改admin的密码,从而完成登录。

具体可查Unicode字符表

ᴀʙᴄᴅᴇꜰɢʜɪᴊᴋʟᴍɴᴏᴘʀꜱᴛᴜᴠᴡʏᴢ

只能说太巧妙了。。。ORZ ORZ ORZ ORZ ORZ

方法三:条件竞争

原理如下:
这个主要就是因为再session赋值的时候都是直接进行赋值,而并没有进行验证,也就是说,比如我们随便注册个用户123,然后进程1再使用用户123重复的进行登录,改密码操作,进程2重复进行注销登录,同时用admin用户和进程2修改的密码进行登录,然后某个时刻进程1刚好要修改密码,进程2恰好要登录,就将进程2 admin的session给了进程1,从而改掉了admin的密码

具体可以参考下面的文章:
一题三解之2018HCTF&admin

[HCTF 2018]admin 1相关推荐

  1. BUUCTF [HCTF 2018] admin

    BUUCTF [HCTF 2018] admin 解法一:弱密码 解法二:Flask伪造Session 解法三:Unicode欺骗 考点: 弱密码 Flask伪造session Unicode欺骗 启 ...

  2. [HCTF 2018]admin

    前言: 最近在BUUCTF刷题,参照师傅们wp后复现一下 0x01 拿到题目后进去如下界面 发现有登录和注册界面,想必是要登录后才能查看想要的信息. 查看页面源代码,看看有没有上面提示,界面如下 提示 ...

  3. HCTF 2018]admin

    知识点 unicode欺骗 session伪造 解法一:unicode欺骗 查看源码发现 <!-- you are not admin --> 应该是要注册成admin用户 先注册一个ad ...

  4. [HCTF 2018] admin

    "地面可以给他们,但天空属于我" 本题有三种解法,本文只介绍第一种,flask session 伪造. 审查题目 发现了网页有注册和登录,先注册一个试试看,上去后发现有 挨个检查源 ...

  5. [HCTF 2018]Hideandseek

    知识点:flask-session伪造,文件读取,mac地址查询 文章目录 解题过程 1. 注册用户并登录 2. 文件读取 2.1 读取/proc/self/environ 2.2 读取/app/uw ...

  6. 记[HCTF 2018]Hideandseek

    记[HCTF 2018]Hideandseek 前言 一万年没刷题了,尽搞些杂七杂八的了,于是乎刷了一个题(自己给自己一个嘴巴子) 总结一下这个题的考点: zip 软链接实现任意文件读取 linux系 ...

  7. BUUCTF [HCTF 2018] Hide and seek

    BUUCTF [HCTF 2018] Hide and seek 考点: 软连接读取任意文件 Flask伪造session /proc/self/environ文件获取当前进程的环境变量列表 rand ...

  8. BUUCTF:[HCTF 2018]Hide and seek

    BUUCTF:[HCTF 2018]Hide and seek 参考:https://www.jianshu.com/p/d20168da7284 先随便输入账号密码登录 提示我们上传zip文件 上传 ...

  9. [HCTF 2018] WarmUp

    [HCTF 2018] WarmUp 开局一张图,先看看页面源码信息 给出了一个 source.php 应该是后端的源码,这题代码审计了 <?phphighlight_file(__FILE__ ...

最新文章

  1. 新上任项目经理遇到的难题
  2. 8086地址传送指令LDS,LES
  3. 012_Spring Data Redis
  4. leaflet大量marker卡顿_leaflet如何加载10万数据
  5. SSH三大框架的知识题
  6. 和AI机器人Alice的一段聊天记录
  7. viewDidLoad等相关函数调用
  8. ffmpeg获取设备支持的分辨率_Qt音视频开发6-ffmpeg解码处理
  9. (转)ATOM介绍和使用
  10. 「中间件」RocketMQ解决消息顺序和重复性消费问题整理(附测试代码)
  11. 让图片自适应屏幕大小
  12. appcode破解方法
  13. 开发一款游戏需要什么技术
  14. C语言基础学习——编译过程
  15. canvas-缤纷小球
  16. 数据可视化笔记5 时间数据可视化
  17. 检索的原理和方法步骤
  18. 下载神器-IDM使用教程及下载
  19. 我安装Solaris的全过程。
  20. 到底什么是商业模式?

热门文章

  1. Linux perm
  2. 软件生命周期管理系统ALM配置说明(二)
  3. 抗混叠滤波器 - ADC前端放大器和RC滤波器设计实现步骤
  4. STM32L051xx的时钟配置
  5. 图的一些基本知识:图,邻居,度矩阵,邻接矩阵
  6. 汽车行业消费者洞察|车载屏幕是否越大越多就越好?
  7. 2,JESD204为什么值得关注?
  8. LinuxRaid的基本知识点
  9. SVN_Windows安装Subversion(svn 命令行工具)教程
  10. Anaconda安装指南