CNAS/MPS CTF 2017: Access Control
Points: 150
这个网站只有管理员才能访问
Write-up
检查header,Cookie里有一串明显的base64字符串,解码之后发现是php的serialize后的,s:5:"guest"
,是个字符串,于是我们改成base64_encode(serialize("admin"))
提交回去,页面改变了,给了一段源码。
检查了一下源码,大概是文件上传,源码有点诡异,这里大概回忆一下过程。首先preg_match("[<>?]", $_POST["data"])
需要返回0,然后preg_match("[<>?]", implode($_POST["data"]))
需要返回非0(只有1了),所以只需要POST一个filename=whatever&data[]=<
即可。
这个题和i春秋上的2017第二届广东省强网杯线上赛who are you?几乎一模一样,只是强网杯的多了个rot13加密
打开页面后提示Sorry. You have no permissions.
查看cookie中有一个role=Zjo1OiJ0aHJmZyI7 base64解密后得到 f:5:"thrfg"; 使用rot13解密后得到 s:5:"guest"; 我们修改成 s:5:"admin"; 然后rot13加密,在base64加密,修改到cookie中,得到一个可以上传的提示。
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <!-- $filename = $_POST['filename']; $data = $_POST['data']; -->Hello admin, now you can upload something you are easy to forget.</body> </html>
然后尝试上传,发现过滤了filename是上传后的文件后缀,data是文件内容,但是过滤了<,我们需要使用数组绕过 data[]=<?php&data[]=?>就得到flag了。