注入漏洞有哪些/【小迪安全】Day83CTF夺旗-python考点SSTI&反序列化&字符串_零开始白帽子教学

注入漏洞有哪些/【小迪安全】Day83CTF夺旗-python考点SSTI&反序列化&字符串_零开始白帽子教学

【小迪安全】夺旗-考点SSTI&反序列化&字符串

注入漏洞_注入漏洞有哪些_漏洞注入攻击

#CTF介绍:

---在大量的比赛真题复现中,将涉及到渗透测试的题库进行了语言区分,主要以 , PHP,Java为主,本章节将各个语言的常考点进行真题复现讲解。

CTF各大题型简介

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

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

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

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

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

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

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

注入漏洞_漏洞注入攻击_注入漏洞有哪些

案例1:CTF夺旗--支付逻辑&JWT&反序列化

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

---在线靶场地址:#[%20%E5%8D%8E%E5%8C%97%E8%B5%9B%E5%8C%BA%%]ikun

---提示要买到IV6,先进行注册一波用户

注入漏洞有哪些_漏洞注入攻击_注入漏洞

---观察url对应的内容,page对应页数,需要通过爬虫来查找lv6

---:81/shop?page=3

注入漏洞有哪些_漏洞注入攻击_注入漏洞

---在前端页面中,lv的内容在

注入漏洞_注入漏洞有哪些_漏洞注入攻击

---写爬虫进行爬取,在181页

漏洞注入攻击_注入漏洞有哪些_注入漏洞

---查找到lv6,账户只有1000,买这个明显不够,这里思路是抓包修改金额,或者修改优惠券(看这个优惠券是前端验证和是服务器验证)

注入漏洞_注入漏洞有哪些_漏洞注入攻击

---查看表单源代码

---在这里存在id/price/

---这里面价格和折扣都可以修改

漏洞注入攻击_注入漏洞有哪些_注入漏洞

---修改折扣

漏洞注入攻击_注入漏洞有哪些_注入漏洞

---点击购买,发现只能管理员才能购买(需要进行逻辑(垂直)越权)

漏洞注入攻击_注入漏洞_注入漏洞有哪些

---信息和权限进行挂钩,查看当前特征

---发现了JWT(头部.负载.签名):

..8Z8

漏洞注入攻击_注入漏洞_注入漏洞有哪些

---什么是JWT

漏洞注入攻击_注入漏洞有哪些_注入漏洞

---对JWT进行解密:

---发现用户名:小迪123,但是JWT的密匙我们现需要进行获取

漏洞注入攻击_注入漏洞_注入漏洞有哪些

---尝试使用c-jwt-工具爆破JWT秘钥,成功得到秘钥。

---下载地址:

---构建使用c-jwt-需要我们在我们linux里安装好头文件。在linux的配置命令是:apt-get -dev

注入漏洞_漏洞注入攻击_注入漏洞有哪些

---下载好c-jwt-,还需要在工具所在目录执行make命令,目的是让文件运行起来。编译完后会生成一个文件

---进行破解,密匙为:1Kun

---根据密匙修改JWT(用户为admin)

..-Xv-

注入漏洞_漏洞注入攻击_注入漏洞有哪些

---修改的jwt,然后放出去

漏洞注入攻击_注入漏洞有哪些_注入漏洞

---发现界面已经改变

漏洞注入攻击_注入漏洞有哪些_注入漏洞

---查看前端源代码查找线索:///www.zip

---访问这个url,发现可以下载源代码

---打开对源代码进行代码审计

---漏洞参考:

注入漏洞有哪些_漏洞注入攻击_注入漏洞

---对反序列化的关键字()在项目中进行搜索:

注入漏洞有哪些_漏洞注入攻击_注入漏洞

---查看源代码:

---post接受传参,然后将接受到的字符串进行反序列化为对象

---我们可以通过构造字符串,为对象的属性和方法进行赋值,构造

漏洞注入攻击_注入漏洞_注入漏洞有哪些

---在表单里面也发现了传参

---构造,传输一个对象执行命令执行的方法(这里是的代码)

---先构造一个对象,里面的方法是的扩展类型,当对象被反序列化时就会调用函数,进行执行命令执行函数,打开/flag.txt的文本

---.dumps()将对象转化为字符串的格式,然后进行序列化为字符串

---.quote是将字符串进行url编码(由于在源代码里面进行了url解码,所以这里需要进行事先的编码)

---():即类继承了对象(里面是默认继承的,类是一切类的父类)

---放到环境去执行:

%%0Ap0%0A%28S%%28%27/flag.txt%27%2C%27r%27%29.read%28%29%22%0Ap1%0Atp2%0ARp3%0A.

---由于表达传参的位置是隐藏的,需要修改

漏洞注入攻击_注入漏洞有哪些_注入漏洞

---直接post传参

注入漏洞有哪些_注入漏洞_漏洞注入攻击

---修改元素,将去掉,发现post的弹窗出现,可以进行post传参

---输入

注入漏洞有哪些_注入漏洞_漏洞注入攻击

---flag出现

注入漏洞有哪些_漏洞注入攻击_注入漏洞

案例2:CTF夺旗--Flask&&SSTI模版注入

---SSTI漏洞的参考:

--- ssti主要为的一些框架 mako ,PHP框架 twig,java框架jade 等等使用了渲染函数,这些函数对用户的输入信任,造成了模板注入漏洞,可以造成文件泄露,rce等漏洞。

#正常的代码片段

---前端name传参,用户通过传递name参数可以控制回显的内容:

---注意:name= .args.get(‘name’)是因为:当需要获取前端页面表单传过来的id值的时候,我们就需要用.args.get,

--- 是flask中页面跳转的方法,其用法很简单,如下:

---这里渲染的模板为:index.html,模板显示的参数为name

注入漏洞_注入漏洞有哪些_漏洞注入攻击

---即用户通过传递name参数可以控制回显的内容:

---我的理解是:这里可能会造成命令执行,如果先传参再渲染,对于的传参会在渲染的时候造成命令执行

漏洞注入攻击_注入漏洞有哪些_注入漏洞

---但是这里即使用户输入渲染模板,更改语法结构,也不会造成SSTI注入:

---原因是:服务端先将index.html渲染,然后读取用户输入的参数,模板其实已经固定,用户的输入不会更改模板的语法结构。

漏洞注入攻击_注入漏洞_注入漏洞有哪些

---如果是不正确的写法(先读取再渲染):

---这里前端表单传递了两个参数name和guest给name

--- 中是中的一个类,可以将字符串的格式固定下来,重复利用。唯一的变量就是name

---方法方法:实质就是生成模板的;通过调用一个方法来生成,而这个方法是通过方法的参数传递给它的;这个方法有三个参数,分别是标签名《title》,标签的相关属性,标签内部的html内容;通过这三个参数,可以生成一个完整的模板。(大致就是渲染的意思)

---%s就是前端的显示变量

---进行测试:我们输入的内容被服务器渲染然后输出,形成SSTI模板注入漏洞

漏洞注入攻击_注入漏洞有哪些_注入漏洞

#SSTI(模板注入)漏洞是否存在的判断(黑盒判断)

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

漏洞注入攻击_注入漏洞有哪些_注入漏洞

---返回页面:比如返回Opos!That page exist.{{2*2}}

---关键字提示:比如flask(这个漏洞是flask框架的)、inja2、mako等

---不同的框架就有不同的模板

漏洞注入攻击_注入漏洞有哪些_注入漏洞

#的构造的基础知识

---:万物皆对象,而class用于返回该对象所属的类

注入漏洞有哪些_注入漏洞_漏洞注入攻击

---:以元组的形式返回一个类所直接继承的类。

---:以字符串返回一个类所直接继承的第一个类

---:返回解析方法调用的顺序。(顺序是由子类到父类,格式是以元组的形式返回)

漏洞注入攻击_注入漏洞_注入漏洞有哪些

---:()获取类的所有子类。(以列表的形式)

注入漏洞_漏洞注入攻击_注入漏洞有哪些

---:

.,用于获取所处空间下可使用的、方法以及所有变量。

---:所有自带类都包含init方法

漏洞注入攻击_注入漏洞_注入漏洞有哪些

#构造

---随便找一个内置类对象用拿到他所对应的类

---用拿到基类('>)

---用()拿到子类列表

---在子类列表中直接寻找可以利用的类(需要找到可以进行命令执行的子类即os模块)

注入漏洞有哪些_注入漏洞_漏洞注入攻击

---但是我的不知道乍回事,成功了但是没有外显

漏洞注入攻击_注入漏洞有哪些_注入漏洞

---检测元素发现在源代码:存在显示

漏洞注入攻击_注入漏洞_注入漏洞有哪些

---存在os模块

注入漏洞有哪些_注入漏洞_漏洞注入攻击

---查找os在里面的位置(我把它复制在文本文档里面,然后写脚本去找):

---我这里在134个

注入漏洞有哪些_注入漏洞_漏洞注入攻击

---根据这个索引验证一下

漏洞注入攻击_注入漏洞_注入漏洞有哪些

---利用os进行的构造(os.类里有popen):

""..[0].()[134]...('os').popen('').read()

---但是这里我不知道为啥报错了

---换一个exp执行:

:5000/?name={{%27%27..[0].()[134]..[%%27][%%27](%(%27os%27).popen(%%27).read()%22)}}

注入漏洞_注入漏洞有哪些_漏洞注入攻击

---也可以使用工具:自动化检测工具(环境)

---下载地址:

---用法:

---检测是否有SSTI漏洞,如下图,发现有漏洞,可上传下载文件(其实也可以命令执行,工具可能会误报)。

---命令: .py -u :5000/acc?=

---这里存在:文件写入/文件阅读/命令执行等等漏洞(缺点:不准确)

---下载flag文件: .py -u :5000/acc?= -- flag.txt flag.txt

漏洞注入攻击_注入漏洞有哪些_注入漏洞

#进入靶场

---靶场地址:#[]

---进去后是一段代码(白盒审计)

---复制到

---这里有两个路由,进入/就是读取源文件;进入/(这里没有进行前端的表单传参),而且存在对于(和)的过滤

---ng函数在渲染模板的时候使用了%s来动态的替换字符串,在渲染的时候会把 {{**}} 包裹的内容当做变量解析替换。

---然后以‘‘(空)连接字符串遍历列表+()的传参(set的{}为c,也就是对于传参的字符串进行修改)

---相当于是一个黑名单,只要涉及里面的字符串,就会为空

---传参的s应该是//{{*}}中的{{*}}(有点迷糊了)

---先手工测试一次

---用工具验证一下(用*取代后面的参数):

.py -u :81//*

---由于这里有过滤,只判断出了存在注入点,但是不能执行其他的功能

--注入点://{{*}}

注入漏洞_漏洞注入攻击_注入漏洞有哪些

---首先,我们先进行类的读取(获取类>获取父类>获取获取的子类列表):

''..[0].()

---源码app.['FLAG'] = os..pop('FLAG')

---推测{{}}可查看所有app.内容

---但是这题设了黑名单[‘’,‘self’]并且过滤了括号

---不过还有一些内置函数,比如(用于构建指定的url,调用已经声明的函数)和。

---Flask提供了很多种方式来加载配置。比如,你可以像在字典中添加一个键值对一样来设置一个配置

---os. 是 获取系统信息的一个方法

---app.[‘FLAG’]就是当前app下一个变量名为’FLAG’的配置,它的值等于os..pop(‘FLAG’):即移除环境变量中的键名为’FLAG’的值。(这句话的意思就是说flag在app的变量里)#根据代码构造

---查看全局变量(所处空间下可使用的、方法以及所有变量):

//{{.}}

注入漏洞有哪些_漏洞注入攻击_注入漏洞

---意思应该是当前app,那我们就看当前app下的:

//{{.[''].}},成功拿到flag

案例3:CTF夺旗--格式化字符串漏洞&读取对象

#格式化字符串漏洞原理

~

网络安全学习,我们一起交流

~

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值