PHP-intval(1、2、3、4、5)

[题目信息]:

题目名称题目难度
PHP-intval1

[题目考点]:

intval()函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于object,否则会产生 E_NOTICE 错误并返回 1

[Flag格式]:

SangFor{eYJm96LGRZuW96h31c-rtSUZTcKgRviG}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2036

[题目writeup]:

1、实验主页

2、源码分析

<?php
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;
    }
}
?>

前置知识

intval()函数用于获取变量的整数值。

intval()函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于object,否则会产生 E_NOTICE 错误并返回 1

分析代码逻辑首先第一个if判断有无参数num,第二个if正则匹配有没有数字,第三个if如果能为1的话,就可执行if里的语句。而intval函数用于object时会发生错误并返回1,所以payload为

?num[]=1






[题目信息]:

题目名称题目难度
PHP-intval1

[题目考点]:

intval()函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于object,否则会产生 E_NOTICE 错误并返回 1

[Flag格式]:

SangFor{GtwMwRWGsioE6GXxfqIOqjV2AmsrVFf0}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2037

[题目writeup]:

1、实验主页

2、源码分析

<?php
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 ( mixed $var [, int $base = 10 ] )
如果 base 是 0,通过检测 var 的格式来决定使用的进制:
  如果字符串包括了 “0x” (或 “0X”) 的前缀,使用 16 进制 (hex);否则,
  如果字符串以 “0” 开始,使用 8 进制(octal);否则,将使用 10 进制 (decimal)。

根据代码逻辑,此题可转换为16进制进行绕过

?num=0x117c 







[题目信息]:

题目名称题目难度
PHP-intval1

[题目考点]:

intval()函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于object,否则会产生 E_NOTICE 错误并返回 1

[Flag格式]:

SangFor{RhNRU3JikB38XSygfeR0trkE4g2BrmDY}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2039

[题目writeup]:

1、实验主页

2、源码分析

<?php
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);
    }
}
?>

题目代码和前面的题目相似,不过做比较时变成了弱比较

可使用八进制进行绕过

/?num=010574






[题目信息]:

题目名称题目难度
PHP-intval1

[题目考点]:

intval()函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于object,否则会产生 E_NOTICE 错误并返回 1

[Flag格式]:

SangFor{cVTZvnh81NTwpFHR0mTtH_adGDWDY-9A}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2040

[题目writeup]:

1、实验主页

2、源码分析

<?php
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){
        echo $flag;
    }else{
        echo intval($num,0);
    }
}
?>

分析代码逻辑,与上题的差别为进行了正则匹配过滤了字母

此时可以通过八进制或小数进行绕过

/?num=4476.1







[题目信息]:

题目名称题目难度
PHP-intval1

[题目考点]:

intval()函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于object,否则会产生 E_NOTICE 错误并返回 1

[Flag格式]:

SangFor{vKlM0pc1b1_4ClZcWaZleXaeOV4TJXLN}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2041

[题目writeup]:

1、实验主页

2、源码分析

<?php
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(!strpos($num, "0")){
        die("no no no!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
}
?>

分析题目代码,与上题比较,将弱比较替换成了强比较,并且使用了strpos函数进行判断

strpos() 函数查找字符串在另一字符串中第一次出现的位置

strpos(string,find,start)
参数描述
string必需。规定要搜索的字符串。
find必需。规定要查找的字符串。
start可选。规定在何处开始搜索。

返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。

因为八进制需要开头指定为0,而strpos()会匹配到返回0,!0也就是1得执行die,我们可以在前面加个空格,这样strpos()会返回1,所以我们把4476转换为8进制10574后,前面再加一个空格即可,payload为

?num= 010574






[题目信息]:

题目名称题目难度
PHP-intval1

[题目考点]:

intval()函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于object,否则会产生 E_NOTICE 错误并返回 1

[Flag格式]:

SangFor{YuOD9PjslXBdLkSw9VzVQgaKd5L1vrEQ}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2042

[题目writeup]:

1、实验主页

2、源码分析

<?php
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(!strpos($num, "0")){
        die("no no no!!!");
    }
    if(intval($num,0)===4476){
        echo $flag;
    }
}
?>

与上题相同,将强比较替换成了弱比较

?num=%0b010574





[题目信息]:

题目名称题目难度
PHP-intval1

[题目考点]:

intval()函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于object,否则会产生 E_NOTICE 错误并返回 1

[Flag格式]:

SangFor{wN5dZOLHOodEJnfT_1riWUWa-17BtJ-9}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2052

[题目writeup]:

1、实验主页

2、源码分析

<?php
highlight_file(__FILE__);
error_reporting(0);
include("flag.php");
if (ereg ("^[a-zA-Z]+$", $_GET['c'])===FALSE)  {
    die('error');
}
if(intval(strrev($_GET['c']))==0x36d){
    echo $flag;
}  

前置知识

ereg() 函数搜索由指定的字符串作为由模式指定的字符串,如果发现模式则返回true,否则返回false。搜索对于字母字符是区分大小写的

strrev() 函数反转字符串。

intval() 函数用于获取变量的整数值

分析代码,首先%00可以截断ereg()函数的搜索,正则表达式只会匹配%00之前的内容;

0x36d的十进制内容为877,我们需要字母在前来满足if条件的正则匹配来跳过if语句,接着再进行字符串的反转得到877a,接着intval()函数取整数部分得到877

?c=a%00778

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值