正如本题所说,脑洞有点大。考点还很多,不过最核心的还是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

最新文章

  1. 前端打包构建工具gulp快速入门
  2. oracle的回收站介绍
  3. 初步了解JPA
  4. asp利用winrar解压缩文件
  5. 最终排名 sdut 2446
  6. spring与redis简单整合
  7. Java int to String互转
  8. eclipse创建本地maven
  9. Java TCP Swing聊天程序
  10. PowerDesigner 的几个使用技巧
  11. x264 亮度信号8x8帧内预测模式
  12. Echarts报错[MODULE_MISS]"echarts/config" is not exists!
  13. T-SQL :编程理论 (一)
  14. 自定义PopView
  15. 1、Ansible简介及简单安装、使用
  16. ELK测试安装
  17. 2019 CCPC wannfly winter camp Day 5
  18. ElasticSearch client API
  19. 【LOJ】#2447. 「NOI2011」兔兔与蛋蛋的游戏
  20. Spring Boot中使用@Transactional注解配置事务管理

热门文章

  1. python文件处理-将图像根据坐标画矩形标记
  2. dup与dup2函数
  3. 洛谷 P1347 【排序】
  4. \\u4e00-\\u9fa5\
  5. Spring Boot2.x 的Druid连接池配置[附带监控]
  6. 使用.Net Core实现的一个图形验证码
  7. Linux系统安装JDK8
  8. [设计模式]工厂方法模式(Factory Method)
  9. Linux多任务编程之七:Linux守护进程及其基础实验(转)
  10. 一篇文章掌握 Python 内置 zip() 的全部内容