CTF——web安全(四)

本文介绍了在BugkuCTF比赛中的三个web安全题目,涉及Base64解码、本地权限获取、Server-SideTemplateInjection(SSTI)漏洞利用,展示了如何通过burpsuit拦截数据包,以及在Flask应用中利用SSTI获取敏感信息获取flag。
摘要由CSDN通过智能技术生成

  web安全实战:题目来源:首页 - Bugku CTF

1、题目一:本地管理员

打开题目,如下图所示,要求输入用户名,密码,下面又有一行n,直接查看源码,发现n的末尾有一段注释字母,这里有一个知识点“==”这个一般为base64编码。

Base64编码使用64个字符:大写字母A到Z、小写字母a到z、数字0到9、加号(+)和斜杠(/)。在某些变种中,等号(=)也被用于末尾的填充。

直接进行解码,发现值为test123,怎么样这个时候一看就觉得这个要么是账号要么是密码,我们试试各种常用用户名和密码,排列组合,发现IP禁止访问,上工具!这里直接选择burpsuit篡改数据包为本地访问。

使用burpsuit拦截数据包,burpsuit使用不做说明,读者需要自行学习软件用法,拦截发送的数据包,第一个请求数据包我们不要forward让他正常请求,进入第二个登录页面

这里直接修改本地为127.0.0.1做尝试,127.0.0.1是回环地址。

发送至功能模块,Repeater,查看回应我们的数据包

回应的数据报说ip禁止访问,我们改一下本地地址

修改本地地址:在数据包中加上X-Forwarded-For:127.0.0.1  ,点击send发送,这次ip不禁止了,提示密码错误,但是我们只有一个test123,那么应当是密码了,管理员系统一般用户名是root,admin等,做尝试。

修改数据包重新发送,这次终于成功登录,我们发现返回的数据包就有flag

2、题目二:Simple_SSTI_1

打开题目如下所示提示,你需要传递一个名为flag的参数,查看源码,得到另一个提示,你知道,在flask里,我们经常设置一个secret_key变量。

是不是有点懵逼,好像没见过这种题目,拿出小本本记着,看看题目Simple_SSTI_1

知识点1:服务器端模板注入(Server-Side Template Injection,简称SSTI)是一种网络安全漏洞,它允许攻击者注入恶意代码到服务器端模板中,从而控制应用程序的执行流程,甚至在服务器上执行任意代码。

那怎么注入呢?

​知识点2:flask注入的三种模板 :{% … %} {{ … }} {# … #},

括号里面填什么就显示什么,我们把他说的secret_key填进去发现啥也没有 ​

知识点3:secret_key是许多应用程序中用于加密会话cookie、密码或其他敏感数据的密钥。如果攻击者能够成功地使模板引擎执行这个表达式,并且应用程序没有适当的防护措施,那么secret_key可能会被输出到攻击者可以查看的地方。 例如,在Flask框架中,config对象包含了所有的配置变量,包括SECRET_KEY。在Jinja2模板引擎中(Flask使用的模板引擎),{{ }}是变量和表达式的语法。因此,{{ config.secret_key }}尝试访问config对象的secret_key属性,并输出它的值。

故此我们直接在url中传递/?flag={{config.secret_key}},发现啥也没有

那我们直接让他全部显示出来/?flag={{config}},发现flag就在其中,其中secret_key竟然是大写!?

这次再传递一次/?flag={{config.SECRET_KEY}},得到flag。

3、题目三:Simple_SSTI_2

趁热打铁,继续

先看源码,这次只有需要传递一个名为flag的参数,源码啥也没有。

这次直接传递/?flag{{config}}先瞅一眼

这下flag看不到了,怎么办

知识点:

__class__:用来查看变量所属的类,根据前面的变量形式可以得到其所属的类

__init__ 初始化类,返回的类型是function

__globals__[] 使用方式是 函数名.__globals__获取function所处空间下可使用的module、方法以及所有变量 os.popen() 方法用于从一个命令打开一个管道

open() 方法用于打开一个文件,并返回文件对象

于是 /?flag={{ config.__class__.__init__.__globals__['os'].popen('ls ..').read() }} 读取文件目录

看到有一个名为flag的文件,

cat进去看 /?flag={{ config.__class__.__init__.__globals__['os'].popen('cat  flag').read() }}

得到flag了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值