BUUCTF-web ikun(Python 反序列化)
正如本题所说,脑洞有点大。考点还很多,不过最核心的还是python的pickle反序列化漏洞
题目中暗示了要6级号,找了很多页都没看到,于是写了脚本
在第180页有6级号,但是价格出奇的高,明显买不起。bp抓包发现有疑似折扣的参数,把值改低后提交,重定向到了后台页面,但是需要admin才行。
这时一早就发现的JWT便派上了用场。在https://jwt.io/在线解析jwt。data段有我们的用户名,可以伪造成admin,但还需要有密钥。
可以使用工具破解。详情见:https://github.com/brendan-rius/c-jwt-cracker
破解出的密码是”1Kun“。把它写入下图箭头所示位置并伪造身份后通过bp发送。
发现源码。下载后在settings.py中发现unicode编码的hint
提示说有后门。在Admin.py中发现了序列化操作
接下来就是盲区了。。。。。
参考了很多资料和大佬的wp,
原理其实和php的差不多。只不过python的序列化不够直观,看起来费劲。
become参数存在反序列化漏洞,参数可控.。pickle.loads()进行了反序列化操作。我们利用的是__reduce__魔术方法。反序列化后产生的对象会在结束时触发reduce从而执行我们构造的代码。
这里采用通用的exp写法
#!/usr/bin/python
import pickle
import urllib class payload(object):
def __reduce__(self):
return (eval, ("open('/flag.txt','r').read()",)) a = pickle.dumps(payload())
a = urllib.quote(a)
print a
运行后得到payload,把箭头指向的hidden属性删除。这样就能利用网页隐藏的post框提交,将become替换成payload。
参考博客:https://xz.aliyun.com/t/2289
https://www.freebuf.com/column/187567.html
https://www.sohu.com/a/274879579_729271
最新文章
- 前端打包构建工具gulp快速入门
- oracle的回收站介绍
- 初步了解JPA
- asp利用winrar解压缩文件
- 最终排名 sdut 2446
- spring与redis简单整合
- Java int to String互转
- eclipse创建本地maven
- Java TCP Swing聊天程序
- PowerDesigner 的几个使用技巧
- x264 亮度信号8x8帧内预测模式
- Echarts报错[MODULE_MISS]";echarts/config"; is not exists!
- T-SQL :编程理论 (一)
- 自定义PopView
- 1、Ansible简介及简单安装、使用
- ELK测试安装
- 2019 CCPC wannfly winter camp Day 5
- ElasticSearch client API
- 【LOJ】#2447. 「NOI2011」兔兔与蛋蛋的游戏
- Spring Boot中使用@Transactional注解配置事务管理
热门文章
- python文件处理-将图像根据坐标画矩形标记
- dup与dup2函数
- 洛谷 P1347 【排序】
- \\u4e00-\\u9fa5\
- Spring Boot2.x 的Druid连接池配置[附带监控]
- 使用.Net Core实现的一个图形验证码
- Linux系统安装JDK8
- [设计模式]工厂方法模式(Factory Method)
- Linux多任务编程之七:Linux守护进程及其基础实验(转)
- 一篇文章掌握 Python 内置 zip() 的全部内容