CTF-Polar靶场-Web题目记录

简单

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就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值