目录
信息收集
从题目来看应该是让扫描备份文件(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