loading...
靶场实战之BugKu(WEB)
Published in:2022-03-15 | category: CTF | 靶场

0x01

本关是WEB关卡第一关
看到题目提示SSTI,是服务器模板注入 (SSTI ) 。
SSTIS是一种利用公共 Web 框架的服务器端模板作为攻击媒介的攻击方式,该攻击利用了嵌入模板的用户输入方式的弱点。SSTI 攻击可以用来找出 Web 应用程序的内容结构。


分析可通过控制变量输入获得消息,并且通过F12的注释提示得到flag可能在secret_key中,还看到了该模板是FLASK。通过搜索了解Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。
使用可以回显数据

于是我们可以在变量中加入config!


图中secret_key中就是要得到的flag值
模板注入攻击

0x02


本关考的还是SSTI,老样子,打开目标网址


发现这次注释取消了,我们不知道模板引擎是哪个,尝试乱打从报错获取信息

发现是jinja2
有两种方法
第一种方法flag可能藏在根目录,直接尝试输入
{{ config.**class**.**init**.**globals**['os'].popen('ls /').read() }}可以看到所有目录
然后随机选取一个进行读取文件,运气好可能直接拿到flag
{{ config.class.init.globals['os'].popen('cd xxx&& ls').read() }}
第二种方法掏出神器Kali,利用其tplmap进行探索构造payload

探索到后再输入


成功获取文件目录,用cat 命令查看flag

0x03


本关的题目是Flask_FileUpload

根据题目和靶场了解到与文件上传有关
打开F12观察注释
通过注释了解到上传的一个文件会在网站中被当做py文件执行,并将执行效果返回到页面中。猜测flag可能在网站里,于是写一个jpg格式的python文件

1
2
import os
os.system("ls /")

ls为查看根目录下的文件,找到flag,然后继续修改添加文件中代码

1
os.system('cat /flag')


得到flag值。

0x04


本关考点只是简单使用F12查看代码,在注释中就有flag

0x05


本关将计算的结果填到输入框中即可获得flag,在第四关的基础上加入了输入的长度限制,打开F12,将限制长度1改为1以上。

0x06


本关考查的是GET方法的使用,打开靶场看到提示

看到提示,在url中添加一个名字为what的变量,赋值为flag

获得flag。

0x07


本关在第六关的基础上将GET方法改成POST方法。
解决起来也很简单,基本不变。

使用HackBar](https://github.com/Mr-xn/hackbar2.1.3),安装到浏览器上(一般为火狐或者谷歌)

在POST框中输入变量,获得flag

0x08



查看分析代码,定义一个参数,当参数不是一个数字或者数字字符串,则返回该参数,如果该参数等于1则返回flag
is_numeric() 函数用于检测变量是否为数字或数字字符串。
注:在php中,==为弱等于,=为完全等于
弱等于是将类型转换后再进行对比(将右边的强制转换为左边相同类型),完全等于是直接比较类型,若类型不同直接返回false

所以本关直接在url后写入参数?num=1+一个字符,1后面输入任意非数字类型字符

返回flag

0x09


打开网址发现弹窗

尝试下F12看看源码

发现有一段注释过的并且经过编码的代码
确定是Unicode编码,放入解码网站,得到flag

0x10


看到页面显示

一段时间后发现页面改变

尝试用bp抓包,等到出现图片的时候抓取

在页面F12打开源码,查看到flag

0x11


本关打开是一个游戏

尝试玩一玩,发现结束没有什么变化,尝试bp抓包。

看见请求了三个参数,一个是分数,一个是本地的ip,一个是sign签名,可能是分数的一个加密,根据页面F12前端的提示目测为base64加密

在解密网站尝试将50用base64加密,发现与sign不完全对应,而是在前面多了一个zM,所以sign应该是zM+score(base64加密)。

试试修改分数的值改为99999,并将sign也改成99999对应的base64加密,成功获得flag。

0x12


打开网页,发现是一个显示有漏洞的页面

根据题目提示,是网站被黑,所以猜测可能存在后门
使用御剑后台扫描尝试扫出后门

根据页面,进入到后门

暂时不知道密码,利用bp进行爆破,字典可以在网上找,获得到密码为hack,登录获得flag

0x13


打开网页

发现有密码登录,尝试F12查看源码

可能是base64加密的密码,放入解密网站进行解密

得到一个为test123的密码,尝试弱口令登录,用户名为admin,密码为test123
登录后发现ip被封

尝试用bp抓包

在请求的头部插入X-Forwarded-For,目的是绕过ip限制

成功获得flag

0x14



看到题目提示为弱密码,z?????意思是z开头的6位数密码,在网上搜索top1000弱密码。用burpsuite抓包并放入intruder。账号尝试root,admin,最后得到账号是admin。

将top1000导入Payload,开始爆破。

发现长度都是一致,查找返回包中内容

在Grep-Match里添加:{code:’bugku10000’},重新爆破

发现在刚添加的关键词里有一个长度为0

爆出密码

登录获得flag

0x15


页面显示一段源码

var_dump() 函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

0x16


根据题目名称和页面显示,猜测是通过改变变量的参数获得flag。

发现php正则表达式

其中\w为匹配纯字符类型,$$args是一个可变变量,而如果$args的值为另一个变量的变量名,$$args就可以代表另一个变量,所以可以考虑依次给args赋值php中的九大全局变量($POST,$_GET,$FILES,$_COOKIE,$SESSION,$_REQUEST,SERVER,$_GLOBALS,$_ENV)
尝试输入GLOBALS

成功获取flag,其中还发现当变量为ZFKwe3时,出现flag。

Prev:
XSS靶场实战二(11-20关)
Next:
XSS靶场实战一(1-10关)
catalog
catalog