简单
swp
通过御剑扫一下网站(dirsearch也行),得到/.index.php.swp如图
知道preg_match有个特性就是超出一定字符数量会直接返回true(好像是的)
payload:
import requests
url="http://6dbb6118-8ca8-4e2a-8489-8d01a3fd0d7b.www.polarctf.com:8090/"
data={"xdmtql":"sys nb" + "a" * 999999}
res=requests.post(url,data=data)
print(res.content)
得到flag
简单rce
看到代码将yyds=666用post传过去,令sys=echo%20’ls’(``用’'替代,不知道为什么这里打不出来,这里是一种叫做内联的方法)
但是回显what’s up,仔细看了看过滤才发现原来空格被过滤了,所以将%20直接用%09替换,得到idnex.php
于是用sys=echo%09’ls%09/'得到根目录下有一个叫flag的文件
但是more,less,cat,tac指令都被过滤了,所以考虑使用sort指令
payload:sys=echo%09'sort%09/flag'
得到flag
蜜雪冰城吉警店
按F12打开元素,将任意一款奶茶的id改成9,然后点击那一款奶茶就可以得到flag了
召唤神龙
在源代码的main.js中有一大串由![]+()组成的东西,是一种加密,放在console直接运行就能得到flag了
seek flag
按F12看到怕爬虫爬到flag,先拿御剑扫一下,扫到一个robots.txt,访问看到flag3,有右大括号,那么肯定还有flag12两个。
看一下请求头发现有个flag2
但是一直没找到flag1在哪,所以不得已看了wp,才知道cookie的id=0
有点奇怪,都没注意到这点,把id改成1再发包过去就得到flag1了
jwt
jwt全名叫JSON Web Token,是一种认证方式,而这种认证方式在CTF中通常是可以破解的。
首先我们先随便注册一个账号,然后使用bp抓包,发现有一串cookie,于是找一个jwt加解密网站,这里我用的这个JWT加解密网站
但是我们发现解密是需要密钥的,这个密钥怎么办呢?我们的可以在kali里安装一个jwt-cracker,然后利用这个工具爆破出密钥
然后就得到密钥SYSA
然后拿网站解密
再将这个cookie替换原本的cookie,访问/panel,就得到flag了
login
这道题算是很逆天了,查看源码看到有个注释20200101,猜测是不是账号密码,登录成功,但是没有任何回显,很奇怪,然后尝试了一下20200102,发现回显了一个f,看出来了,继续,一直到20200111,每一个都给了一个字母或符号,全部组合起来就是flag了。
iphone
进入网站看到enter,点击一下,发现要iphone或者ipad,拿bp抓个包,把头改一下,user-agent改成iphone
就得到flag了
浮生日记
进入网站发现有个输入框,往里打个1,发现会回显到网页内,那么就有可能是XSS攻击了,试一下<script>alert('1');</script>
,虽然上面确实正确回显了,但是并没有实现效果,所以改一下试试"><script>alert('1');</script>
,但还是不行,感觉是不是script给过滤了,试一下双写"><scrscriptipt>alert('1');</scrscriptipt>
然后就正确回显了,自动跳转到flag,确实是XSS
中等
到底给不给flag呢
先审计代码
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
<?php
highlight_file('1.txt');
echo "<br><br>";
$flag = 'flag{f73da0c8e7c774d488a6df0fec2890d9}';
$qwq= '我想要flag';
$QAQ = '我又不想要flag了,滚吧';
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($qwq);
}
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
exit($QAQ);
}
foreach ($_POST as $key => $value) {
$$key = $value;
}
foreach ($_GET as $key => $value) {
$$key = $$value;
}
echo $flag;
发现有foreach和$$
出现,所以只需要get或者post其中一个flag是flag就行了。
很明显令a=flag&flag=a就行了,但是不知道POST的flag怎么办。
但是试了一下发现不需要POST就可以得到flag,也就是说直接/?a=flag&flag=a
就可以得到flag了。
PS:
后来仔细看了一下代码,发现if(!isset($_GET['flag']) && !isset($_POST['flag']))
这里的代码是两个都未定义,就是只需要定义一个flag就行了。