[HCTF 2018]admin 1
前言
这题的三种方法都是姿势盲区。。。。第三种方法只给个介绍。。因为好像复现的话不能成功,但是学习学习这种方法的思想。
姿势总结
- flask session伪造
- unicode欺骗
- 条件竞争
方法一: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相关推荐
- BUUCTF [HCTF 2018] admin
BUUCTF [HCTF 2018] admin 解法一:弱密码 解法二:Flask伪造Session 解法三:Unicode欺骗 考点: 弱密码 Flask伪造session Unicode欺骗 启 ...
- [HCTF 2018]admin
前言: 最近在BUUCTF刷题,参照师傅们wp后复现一下 0x01 拿到题目后进去如下界面 发现有登录和注册界面,想必是要登录后才能查看想要的信息. 查看页面源代码,看看有没有上面提示,界面如下 提示 ...
- HCTF 2018]admin
知识点 unicode欺骗 session伪造 解法一:unicode欺骗 查看源码发现 <!-- you are not admin --> 应该是要注册成admin用户 先注册一个ad ...
- [HCTF 2018] admin
"地面可以给他们,但天空属于我" 本题有三种解法,本文只介绍第一种,flask session 伪造. 审查题目 发现了网页有注册和登录,先注册一个试试看,上去后发现有 挨个检查源 ...
- [HCTF 2018]Hideandseek
知识点:flask-session伪造,文件读取,mac地址查询 文章目录 解题过程 1. 注册用户并登录 2. 文件读取 2.1 读取/proc/self/environ 2.2 读取/app/uw ...
- 记[HCTF 2018]Hideandseek
记[HCTF 2018]Hideandseek 前言 一万年没刷题了,尽搞些杂七杂八的了,于是乎刷了一个题(自己给自己一个嘴巴子) 总结一下这个题的考点: zip 软链接实现任意文件读取 linux系 ...
- BUUCTF [HCTF 2018] Hide and seek
BUUCTF [HCTF 2018] Hide and seek 考点: 软连接读取任意文件 Flask伪造session /proc/self/environ文件获取当前进程的环境变量列表 rand ...
- BUUCTF:[HCTF 2018]Hide and seek
BUUCTF:[HCTF 2018]Hide and seek 参考:https://www.jianshu.com/p/d20168da7284 先随便输入账号密码登录 提示我们上传zip文件 上传 ...
- [HCTF 2018] WarmUp
[HCTF 2018] WarmUp 开局一张图,先看看页面源码信息 给出了一个 source.php 应该是后端的源码,这题代码审计了 <?phphighlight_file(__FILE__ ...
最新文章
- 新上任项目经理遇到的难题
- 8086地址传送指令LDS,LES
- 012_Spring Data Redis
- leaflet大量marker卡顿_leaflet如何加载10万数据
- SSH三大框架的知识题
- 和AI机器人Alice的一段聊天记录
- viewDidLoad等相关函数调用
- ffmpeg获取设备支持的分辨率_Qt音视频开发6-ffmpeg解码处理
- (转)ATOM介绍和使用
- 「中间件」RocketMQ解决消息顺序和重复性消费问题整理(附测试代码)
- 让图片自适应屏幕大小
- appcode破解方法
- 开发一款游戏需要什么技术
- C语言基础学习——编译过程
- canvas-缤纷小球
- 数据可视化笔记5 时间数据可视化
- 检索的原理和方法步骤
- 下载神器-IDM使用教程及下载
- 我安装Solaris的全过程。
- 到底什么是商业模式?