首页 > 代码库 > preg_match()漏洞

preg_match()漏洞

今天大哥丢了一道题过来.
<?php
$str = intval($_GET[‘id‘]);
$reg = preg_match(‘/\d/is‘, $_GET[‘id‘]);    //有0-9的数字 和.在内的符号  
if(!is_numeric($_GET[‘id‘]) and $reg !== 1 and $str === 1){
    echo ‘Flag‘;
}else{
    echo "<img src=http://www.mamicode.com/‘./1.jpg‘>";
}
?>本来自信的以为是阶段或者十六进制 结果搞不定就往php函数漏洞上来研究了
PHP所使用的preg_match()函数从用户输入字符串获得参数,如果所传送的值为数组而不是字符串就会生成警告,警告消息中包含有当前运行脚本的完整路径。
技术分享
技术分享  暴力过题。。。  当提交id[]=1时

intval($_GET[‘id‘]);  输出 1

is_numeric($_GET[‘id‘]) 不存在
preg_match(‘/\d/is‘, $_GET[‘id‘]); !=1

 


以前在南京邮电做了一道题 如出一辙 <?php function noother_says_correct($number) { $one = ord(‘1‘); $nine = ord(‘9‘); for ($i = 0; $i < strlen($number); $i++) { $digit = ord($number{$i}); if ( ($digit >= $one) && ($digit <= $nine) ) { return false; } } return $number == ‘54975581388‘; } $flag=‘*******‘; if(noother_says_correct($_GET[‘key‘])) echo $flag; else echo ‘access denied‘; ?>

 

preg_match()漏洞