标签:鹤城 EasyP utils SERVER PHP 2021 绕过 php SELF
<?php include 'utils.php'; if (isset($_POST['guess'])) { $guess = (string) $_POST['guess']; if ($guess === $secret) { $message = 'Congratulations! The flag is: ' . $flag; } else { $message = 'Wrong. Try Again'; } } if (preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])) { exit("hacker :)"); } if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){ exit("hacker :)"); } if (isset($_GET['show_source'])) { highlight_file(basename($_SERVER['PHP_SELF'])); exit(); }else{ show_source(__FILE__); } ?>
这个题目出现了$_SERVER['PHP_SELF']
这个是你调用的脚本的路径
比如说这个题目它的值就是/index.php
如果你访问的是
http://1.14.71.254:28189/index.php/utils.php
那么它的值就会是/index.php/utils.php
而$_SEVER['REQUEST_URL']
它的值这个时候和$_SERVER['PHP_SELF']的值是一样的,
区别在于,如果你用get传参的时候$_SEVER['REQUEST_URL']是会加上那个参数的,而$_SERVER['PHP_SELF']不会。
然后是basename这个函数。
这个函数是返回最后面一个/后面的名字。
这个函数有一个可以利用的地方就是,如果传入的参数中出现了非ascii字符则会把它给丢弃。
最后是讲绕过正则
if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){ exit("hacker :)"); }
这个正则的绕过方法就是利用特性来绕过,可以用
[
(空格)
+
.
上面那几个字符任何一个都行,都可以被处理成_
if (preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])) { exit("hacker :)"); }
这个正则是匹配末尾有没有utils.php/
绕过办法很简单
因为后面要调用basename,所以可以利用中文来绕过,中文不属于ascii编码中的,所以可以payload
标签:鹤城,EasyP,utils,SERVER,PHP,2021,绕过,php,SELF 来源: https://www.cnblogs.com/FPointzero/p/16438478.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。