简介
原题复现:
考察知识点:无参数命令执行、绕过filter_var(), preg_match()
线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题
环境复现
目录
www/flag flag文件 www/code/code.php
代码


1 <?php 2 function is_valid_url($url) { 3 //FILTER_VALIDATE_URL 过滤器把值作为 URL 进行验证。 4 if (filter_var($url, FILTER_VALIDATE_URL)) { 5 if (preg_match('/data:\/\//i', $url)) { 6 return false; 7 } 8 return true; 9 } 10 return false; 11 } 12 13 14 if (isset($_POST['url'])){ 15 $url = $_POST['url']; 16 if (is_valid_url($url)) { 17 $r = parse_url($url); 18 var_dump($r); 19 if (preg_match('/baidu\.com$/', $r['host'])) { 20 $code = file_get_contents($url); 21 var_dump($code); 22 if (';' === preg_replace('/[a-z]+\((?R)?\)/', NULL, $code)) { 23 if (preg_match('/et|na|nt|strlen|info|path|rand|dec|bin|hex|oct|pi|exp|log/i', $code)) { 24 echo 'bye~'; 25 } else { 26 eval($code); 27 } 28 } 29 } else { 30 echo "error: host not allowed"; 31 } 32 } else { 33 echo "error: invalid url"; 34 } 35 }else{ 36 highlight_file(__FILE__); 37 }