[题目信息]:
题目名称 | 题目难度 |
---|---|
PHP-intval | 1 |
[题目考点]:
intval()函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于object,否则会产生 E_NOTICE 错误并返回 1
[Flag格式]:
SangFor{eYJm96LGRZuW96h31c-rtSUZTcKgRviG}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:2036
[题目writeup]:
<?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-intval | 1 |
[题目考点]:
intval()函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于object,否则会产生 E_NOTICE 错误并返回 1
[Flag格式]:
SangFor{GtwMwRWGsioE6GXxfqIOqjV2AmsrVFf0}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:2037
[题目writeup]:
1、实验主页
<?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-intval | 1 |
[题目考点]:
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-intval | 1 |
[题目考点]:
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-intval | 1 |
[题目考点]:
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-intval | 1 |
[题目考点]:
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-intval | 1 |
[题目考点]:
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