目录
信息收集
从题目来看应该是让扫描备份文件(backupfile)
进入页面就一句话
Try to find out source file!
先用dirbuster模糊扫描一下目录
常见的如下
index.phps
index.php.swp
index.php.swo
index.php.php~
index.php.bak
index.php.txt
index.php.old
常见备份文件:“.git” 、“.svn”、“ .swp” “.~”、“.bak”、“.bash_history”、“.bkf“
在index.php.bak下载到一份源码
-
<?php
-
include_once
"flag.php";
-
if(
isset(
$_GET[
'key'])) {
-
$key =
$_GET[
'key'];
-
if(!
is_numeric(
$key)) {
-
exit(
"Just num!");
-
}
-
$key =
intval(
$key);
-
$str =
"123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
-
if(
$key ==
$str) {
-
echo
$flag;
-
}
-
}
-
else {
-
echo
"Try to find out source file!";
-
}
-
?>
思路
代码审计
intval() 函数用于获取变量的整数值。
intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。
构造payload
?key=123
得到flag
知识补充
由于php中数字和字符串比较时
-
$v1 =
"1";
-
$v2 =
1;
-
if (
$v1==
$v2){
-
echo (
"true<br/>");
-
}
else{
-
echo(
"false<br />");
-
};
-
if (
$v1===
$v2){
-
echo (
"true<br/>");
-
}
else{
-
echo(
"false<br />");
-
};
true
false
-
<?php
-
$a=
1;
-
$b=
"text";
-
$c=
0;
-
if(
$a==
$b){
-
echo
"true";
-
}
-
else{
-
echo
"false";
-
}
-
if(
$c==
$b){
-
echo
"true";
-
}
-
else{
-
echo
"false";
-
}
-
?>
false
true在php中 == 判断时 当数字与字符串作比较时,系统会先将字符串转化为数字,再与数字进行比较。数字和字符串进行比较时,当这个字符串是一个无法转换为数字的字符串,它就会被强制转化为数字,结果总是为0
数字+字符(字符串)
-
<?php
-
$a=
888;
-
$b=
"888a";
-
if(
$a==
$b){
-
echo
"true";
-
}
-
else{
-
echo
"false";
-
}
-
?>
true
字符(字符串)+数字
-
<?php
-
$a=
888;
-
$b=
"a888";
-
$c=
0;
-
if(
$a==
$b){
-
echo
"true";
-
}
-
else{
-
echo
"false";
-
}
-
echo
'<br>';
-
if(
$c==
$b){
-
echo
"true";
-
}
-
else{
-
echo
"false";
-
}
-
?>
false
true
数字+字符(字符串)+数字
-
<?php
-
$a=
8;
-
$b=
"8a8";
-
$c=
0;
-
if(
$a==
$b){
-
echo
"true";
-
}
-
else{
-
echo
"false";
-
}
-
echo
'<br>';
-
if(
$c==
$b){
-
echo
"true";
-
}
-
else{
-
echo
"false";
-
}
-
?>
true
false
字符(字符串)+数字+字符(字符串)
-
<?php
-
$a=
0;
-
$b=
"a88a";
-
if(
$a==
$b){
-
echo
"true";
-
}
-
else{
-
echo
"false";
-
}
-
?>
true
转载:https://blog.csdn.net/qq_63701832/article/details/128708564
查看评论