[ZJCTF-2019]NiZhuanSiWei
0x00 过程
进入主页发现php代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <?php $text = $_GET ["text" ];$file = $_GET ["file" ];$password = $_GET ["password" ];if (isset ($text )&&(file_get_contents ($text ,'r' )==="welcome to the zjctf" )){ echo "<br><h1>" .file_get_contents ($text ,'r' )."</h1></br>" ; if (preg_match ("/flag/" ,$file )){ echo "Not now!" ; exit (); }else { include ($file ); $password = unserialize ($password ); echo $password ; } }else { highlight_file (__FILE__ ); }?>
首先检测传入参数是否有text,如果有就读text,判断是否等于welcome to the zjctf
。先过这个判断,首先在vps起个web服务,主页就设置成判断的字符串,即可绕过:
进入下面的判断,首先正则匹配flag,如果匹配到了则返回警告信息。否则就包含文件。这里注释了useless.php
,提示要包含它,但是包含后页面无回显,说明文件里都是php代码,使用php://filter
转base64输出后解码:
1 2 3 4 5 6 7 8 9 10 11 12 13 <?php class Flag { public $file ; public function __tostring ( ) { if (isset ($this ->file)){ echo file_get_contents ($this ->file); echo "<br>" ; return ("U R SO CLOSE !///COME ON PLZ" ); } } } ?>
得到一个Flag类,且有__tostring
魔术方法,正好可以和之前的password
反序列化结合利用。此处将O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
传入password即可得到flag:
0x01 参考
(32条消息) 反序列化漏洞详解_一句话木马的博客-CSDN博客_反序列化漏洞