知识点:逻辑漏洞、jwt密钥破解、python反序列化漏洞

进入靶机查看源码:

提示需要买到lv6,注册账号发现给了1000块钱,根据ctf套路应该是用很低的价格买很贵的lv6,首页翻了几页都没发现lv6,写脚本找:

import requests

url = "http://76267771-2542-4ee4-a22f-d01b144fa6c5.node3.buuoj.cn/shop?page={}"
for i in range(10,1000):
url1=url.format(i)
r=requests.get(url1)
if "lv6.png" in r.text:
print("我找到了lv6了 %d"%i)
break;
else:
print(url1)

跑出结果是lv6在181页,而且很贵买不起

看一下源码,发现是可以直接改折扣和价格的,但是价格修改后支付失败,但是可以把折扣改的很低很低比如0.000000000000000000001

购买成功后发现页面只允许admin访问

但是我们不是管理员,那么需要获得管理员的cookie,查看一下当前页面的cookie发现有一栏叫做jwt

可以去jwt.io这个网站去验证一下这个jwt

若要获得管理员的jwt,需要先把username改为admin然后破解your-256-bit-secret密钥,这样jwt.io就会返回正确的管理员的jwt-cookie

这里就需要破解jwt秘钥的软件https://github.com/brendan-rius/c-jwt-cracker

安装步骤是先clone破解软件

git clone https://github.com/brendan-rius/c-jwt-cracker.git

再进入文件夹,最后make编译

然后开始破解工作,双引号内是jwt,破解出密码为1Kun

这个时候在jwt.io把username改为admin然后密钥处填上1Kun,左侧返回正确的管理员的jwt-cookie

利用editcookie插件add cookie(应该直接修改jwt就可以,但是插件不太好用,add才可以)刷新后页面改变

查看源码发现提示,可以下载源码

审计之后找到了一个python反序列化的地方,在 Admin.py

post这个函数里,首先get_argument是一个框架的内置函数用来获取变量

become = self.get_argument('become')

然后urllib.unquote把字典形式的参数进行url编码,然后pickle.loads对应pickle.dumps,相当于反序列化和序列化

p = pickle.loads(urllib.unquote(become))

测试一下pickle.dumps产生的序列化大概是个什么样子(由于这个站本身是python2.x的站,所以代码最后也要按照python2.x 的方式来运行)

import pickle
d1 = dict(name='phoebe',age='')
print(pickle.dumps(d1))

是一个二进制的文件流,多用来写文件,然后再来了解一下python的魔术方法_reduce_,当定义扩展类型时(也就是使用Python的C语言API实现的类型),如果你想pickle它们,你必须告诉Python如何pickle它们。

_reduce_ 被定义之后,当对象被Pickle时就会被调用。那么脚本如下:

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

(主要还是这行代码:return (eval, ("open('/flag.txt','r').read()",))

reduce它要么返回一个代表全局名称的字符串,Pyhton会查找它并pickle,要么返回一个元组。这个元组包含2到5个元素,

其中包括:

一个可调用的对象,用于重建对象时调用;

一个参数元素,供那个可调用对象使用;

被传递给 setstate 的状态(可选);

一个产生被pickle的列表元素的迭代器(可选);

一个产生被pickle的字典元素的迭代器(可选)。

我们要返回的是flag.txt的字节流,所以我们需要返回一个元组,这个元组包含两个必选的参数,第一个可调用的对象,我们这里用的eval,第二个参数,我们使用的是open(’/flag.txt’,‘r’).read())

点击一键成为大会员抓包修改become值,得到flag

参考:http://github.mrkaixin.computer/2019/06/05/BUUCTF%E5%81%9A%E9%A2%98%E7%AC%94%E8%AE%B0/#toc-heading-10

[CISCN2019 华北赛区 Day1 Web2]ikun的更多相关文章

  1. 刷题记录:[CISCN2019 华北赛区 Day1 Web2]ikun

    目录 刷题记录:[CISCN2019 华北赛区 Day1 Web2]ikun 一.涉及知识点 1.薅羊毛逻辑漏洞 2.jwt-cookies伪造 Python反序列化 二.解题方法 刷题记录:[CIS ...

  2. BUUCTF | [CISCN2019 华北赛区 Day1 Web2]ikun

    步骤: 找到lv6的购买出,修改折扣买lv6 :然后找到admin的登陆界面,JWT破解,登陆admin :点击一键成为大会员,利用python反序列化漏洞读取flag 解析: 这题师傅们的WP已经很 ...

  3. [原题复现+审计][CISCN2019 华北赛区 Day1 Web2]ikun(逻辑漏洞、JWT伪造、python序列化)

    简介  原题复现:  考察知识点:逻辑漏洞.JWT伪造.python反序列化  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台 ...

  4. [CISCN2019 华北赛区 Day1 Web2]ikun-1

    考点:JWT身份伪造.python pickle反序列化.逻辑漏洞 1.打开之后首页界面直接看到了提示信息,信息如下: 2.那就随便注册一个账号进行登录,然后购买lv6,但是未发现lv6,那就查看下一 ...

  5. [CISCN2019 华北赛区 Day1 Web2]ikun-1|python反序列化

    考点:JWT身份伪造.python pickle反序列化.逻辑漏洞 1.打开之后首页界面直接看到了提示信息,信息如下: 2.那就随便注册一个账号进行登录,然后购买lv6,但是未发现lv6,那就查看下一 ...

  6. 刷题记录:[CISCN2019 华北赛区 Day1 Web5]CyberPunk

    目录 刷题记录:[CISCN2019 华北赛区 Day1 Web5]CyberPunk 一.知识点 1.伪协议文件读取 2.报错注入 刷题记录:[CISCN2019 华北赛区 Day1 Web5]Cy ...

  7. 刷题记录:[CISCN2019 华北赛区 Day1 Web1]Dropbox

    目录 刷题记录:[CISCN2019 华北赛区 Day1 Web1]Dropbox 一.涉及知识点 1.任意文件下载 2.PHAR反序列化RCE 二.解题方法 刷题记录:[CISCN2019 华北赛区 ...

  8. PHAR伪协议&&[CISCN2019 华北赛区 Day1 Web1]Dropbox

    PHAR:// PHP文件操作允许使用各种URL协议去访问文件路径:如data://,php://,等等 include('php://filter/read=convert.base64-encod ...

  9. [CISCN2019 华北赛区 Day1 Web5]CyberPunk

    0x00 知识点 PHP伪协议直接读取源码 http://xxx.xxx/index.php?file=php://filter/convert.base64-encode/resource=inde ...

随机推荐

  1. Vue 使用MD5 加密

    第一步: npm安装: npm install --save js-md5 第二步: 全局引用 import md5 from 'js-md5'; Vue.prototype.$md5 = md5; ...

  2. 收藏---wordpress搭建出来的blog

    http://blog.luofei.org/2012/02/painters-and-paintings-through-the-eyes-of-faith/

  3. location练习!(重点)

    写location最重要的就是hosts文件,添加一次域名跳转就得添加一条hosts文件 hosts文件: 192.168.200.120 www.a.com 192.168.200.119 www. ...

  4. Redis 作为windows服务运行

    如果服务器上以控制台方式运行Redis服务,非常不方便,不小心会被人点击关闭,到时服务就挂了. 使用 命令的方式,将配置加载到windows服务,执行后无法启动,提示配置问题. redis-serve ...

  5. Centos7 [ubuntu] 安装pycharm2019.1.3并永久破解教程

    一.安装pycharm2019专业版并激活步骤 1.拉取安装包 # wget   https://download.jetbrains.com/python/pycharm-professional- ...

  6. Navicat Premium 12安装及激活

    一.安装 百度云下载地址:https://pan.baidu.com/s/1T5BjpBqLtwCy26szcKSdKw 提取码:ujzx 二.激活步骤 ①将navicat-keygen-for-x6 ...

  7. 机器学习基础系列--先验概率 后验概率 似然函数 最大似然估计(MLE) 最大后验概率(MAE) 以及贝叶斯公式的理解

    目录 机器学习基础 1. 概率和统计 2. 先验概率(由历史求因) 3. 后验概率(知果求因) 4. 似然函数(由因求果) 5. 有趣的野史--贝叶斯和似然之争-最大似然概率(MLE)-最大后验概率( ...

  8. 吴裕雄--天生自然ORACLE数据库学习笔记:其它数据对象

    create index emp_deptno_index on emp(deptno) pctfree tablespace users; create bitmap index emp_salar ...

  9. ANSYS-MFC二次开发

    目录 1. 开发流程 2. 开发代码 1. 开发流程 ANSYS-MFC二次开发的思路其实是特别简单的,通常MFC主要是设计界面,然后从MFC界面中读取要设计的参数,然后根据这些设置了的参数生成APD ...

  10. Python组合类型笔记

    Python中常用的三种组合数据类型,分别是: - 集合类型 - 序列类型 - 字典类型 1. 集合类型: -集合用大括号{}表示,元素间用逗号分隔 -建立集合类型用{}或set() -建立空集合类型 ...