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

分析可通过控制变量输入获得消息,并且通过F12的注释提示得到flag可能在secret_key中,还看到了该模板是FLASK。通过搜索了解Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。
使用可以回显数据-ab84ff416fe841ba84e526f8828ab5ef.png)
于是我们可以在变量中加入config!
-b0ef8ebb7318416491c6d73a5fc084bb.png)
图中secret_key中就是要得到的flag值
模板注入攻击
0x02
-8b32ec2cd9274bd08c5dd57459650cb6.png)
本关考的还是SSTI,老样子,打开目标网址-eee066248f934b0f91ae7dbbc21b1807.png)

发现这次注释取消了,我们不知道模板引擎是哪个,尝试乱打从报错获取信息
发现是jinja2
有两种方法
第一种方法flag可能藏在根目录,直接尝试输入{{ config.**class**.**init**.**globals**['os'].popen('ls /').read() }}可以看到所有目录
然后随机选取一个进行读取文件,运气好可能直接拿到flag{{ config.class.init.globals['os'].popen('cd xxx&& ls').read() }}
第二种方法掏出神器Kali,利用其tplmap进行探索构造payload-0f79454d170a49528f5ac56b718d54ea.png)
探索到后再输入

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

本关的题目是Flask_FileUpload
根据题目和靶场了解到与文件上传有关
打开F12观察注释
通过注释了解到上传的一个文件会在网站中被当做py文件执行,并将执行效果返回到页面中。猜测flag可能在网站里,于是写一个jpg格式的python文件
1  | import os  | 
ls为查看根目录下的文件,找到flag,然后继续修改添加文件中代码
1  | os.system('cat /flag')  | 

得到flag值。
0x04
-ed6f16d44f74468eaa3a5b892f5d9fdc.png)
本关考点只是简单使用F12查看代码,在注释中就有flag
0x05
-9d72688c2fdf4861bb10eac611bd5f34.png)
本关将计算的结果填到输入框中即可获得flag,在第四关的基础上加入了输入的长度限制,打开F12,将限制长度1改为1以上。
0x06
-91ffa12b5a414ca4bf2229ac1a60570d.png)
本关考查的是GET方法的使用,打开靶场看到提示-89c800d2c0454b8e87589678bc6e86d6.png)
看到提示,在url中添加一个名字为what的变量,赋值为flag-3b21269ba8cb491abe1dcd986ff8fa9c.png)
获得flag。-cc86b2e409ba41fea53008a49504c527.png)
0x07
-d43202fb7ff8440b923ad8b55ed613f6.png)
本关在第六关的基础上将GET方法改成POST方法。
解决起来也很简单,基本不变。-aed99794916d42e48624af918c19d701.png)
使用HackBar](https://github.com/Mr-xn/hackbar2.1.3),安装到浏览器上(一般为火狐或者谷歌)-bb9c60c384914d64be513ebd3316bef5.png)
在POST框中输入变量,获得flag-2088f23dfafd4776a717596b12cb39fb.png)
0x08
-8937e5d82dec4ff192c45f3da82d9df4.png)
-c5399d8b57e44556bdd3519d255a97df.png)
查看分析代码,定义一个参数,当参数不是一个数字或者数字字符串,则返回该参数,如果该参数等于1则返回flag
is_numeric() 函数用于检测变量是否为数字或数字字符串。
注:在php中,==为弱等于,=为完全等于
弱等于是将类型转换后再进行对比(将右边的强制转换为左边相同类型),完全等于是直接比较类型,若类型不同直接返回false-fefafbbc589741df92e180aa07dbf519.png)
所以本关直接在url后写入参数?num=1+一个字符,1后面输入任意非数字类型字符-51e86db6cb244cdf8ab9455faf30cdd1.png)
返回flag
0x09
-c54f07e6bb49414faca289f276c4ee4b.png)
打开网址发现弹窗-3232e5361f564a23b1634c4029cf6134.png)
尝试下F12看看源码-cb619fb8522342ca8458f93c22d84454.png)
发现有一段注释过的并且经过编码的代码
确定是Unicode编码,放入解码网站,得到flag-84c37ab9bbdc434c949c913b7ed6d1fc.png)
0x10
-bbd12ff4928848b6960ac9d738f03bc8.png)
看到页面显示
一段时间后发现页面改变-bbfbe7a71d674e9987170c9bc97d6d50.png)
尝试用bp抓包,等到出现图片的时候抓取-44f4bfb0bb3841a2b49148b4d17b770f.png)
在页面F12打开源码,查看到flag-b471ed907f844e678ccba8ec46aaae82.png)
0x11
-87a984f9c76848d6ab26c646c63db5d6.png)
本关打开是一个游戏
尝试玩一玩,发现结束没有什么变化,尝试bp抓包。
看见请求了三个参数,一个是分数,一个是本地的ip,一个是sign签名,可能是分数的一个加密,根据页面F12前端的提示目测为base64加密-04efb94231a7486fb3f49f327e76577f.png)
在解密网站尝试将50用base64加密,发现与sign不完全对应,而是在前面多了一个zM,所以sign应该是zM+score(base64加密)。-e818c88789bb477c9d805c65c8a70d33.png)
试试修改分数的值改为99999,并将sign也改成99999对应的base64加密,成功获得flag。-f6d0cf8a7deb495a8e6be1dd3f24559f.png)
0x12
-8839e0dcecc04f34a4fc775d5470e464.png)
打开网页,发现是一个显示有漏洞的页面
根据题目提示,是网站被黑,所以猜测可能存在后门
使用御剑后台扫描尝试扫出后门-deaa3cf328b34ea1a5b742ec73dc9b14.png)
根据页面,进入到后门-0d44bf3feee241f4b28b0175ad6fe974.png)
暂时不知道密码,利用bp进行爆破,字典可以在网上找,获得到密码为hack,登录获得flag-922228ebb25042ac82b32a1cea0ba5c4.png)
0x13

打开网页-3350a9169a55441b8fa484d21b4d8240.png)
发现有密码登录,尝试F12查看源码-ebfada7f4bed4fbf850ffaca16f7a26c.png)
可能是base64加密的密码,放入解密网站进行解密-11bc0cc4e1e74933a807e8627cc794d3.png)
得到一个为test123的密码,尝试弱口令登录,用户名为admin,密码为test123
登录后发现ip被封-5b79aec74ded44c1a7c023628df73b3e.png)
尝试用bp抓包-29f201315f0b4c3a8f6a6835e1662dd4.png)
在请求的头部插入X-Forwarded-For,目的是绕过ip限制-43e48bdcb1194598839365d5d75080b3.png)
成功获得flag-af01b8829a7f4833b1d4ff00c25beca0.png)
0x14
-13c4964ed1be45b3b3f1cc753eab729e.png)

看到题目提示为弱密码,z?????意思是z开头的6位数密码,在网上搜索top1000弱密码。用burpsuite抓包并放入intruder。账号尝试root,admin,最后得到账号是admin。-b75559b9f4f74970ba6c6e53408a24d4.png)
将top1000导入Payload,开始爆破。-865f998e183c4ff9a32cd1f6dd192612.png)
发现长度都是一致,查找返回包中内容-c7baef4b13ff457c84dd3f2ca3b7be1d.png)
在Grep-Match里添加:{code:’bugku10000’},重新爆破-6a25fe4fbfa64ce080cf7f8a4af194b1.png)
发现在刚添加的关键词里有一个长度为0-ffd4ba28b03042b1ba8b1504184304a9.png)
爆出密码-67908904564a48de9456514ab38b0807.png)
登录获得flag-1ca3afc98c3b48639e9507abb17296e9.png)
0x15
-9c09230348ce47269af69f01e2076896.png)
页面显示一段源码-9f143d87cc4147e586787d65cfdc8d99.png)
var_dump() 函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。-f5c53fc22a6e44bbabe44a25f684ff25.png)
-15f24dc617d34b27a6a6318fbd4055fd.png)
0x16
-4c87a49537ca4832bfd398d48864ea03.png)
根据题目名称和页面显示,猜测是通过改变变量的参数获得flag。
发现php正则表达式
其中\w为匹配纯字符类型,$$args是一个可变变量,而如果$args的值为另一个变量的变量名,$$args就可以代表另一个变量,所以可以考虑依次给args赋值php中的九大全局变量($POST,$_GET,$FILES,$_COOKIE,$SESSION,$_REQUEST,SERVER,$_GLOBALS,$_ENV)
尝试输入GLOBALS-03e4d78c63d24db198789f9c255f2363.png)
成功获取flag,其中还发现当变量为ZFKwe3时,出现flag。