[HCTF 2018]WarmUp
1
进入环境发现就只有一个img图片还显示失败,我们查看一下源代码,给出提示source.php 我们访问一下source.php ,发现是一段php代码,接下来我们对代码进行审计
我们从代码下方开始阅读
题目中涉及到的知识为 if(){}else{}函数 empty 函数 is_string函数 && 和 ||运算符号
Include 函数 exit 函数 echo 函数 isset 函数 is_stering 函数 return 函数 in_array函数 urldecode() 函数 以及 定义方法及对象的理解 及使用。
接下来我们开始像大家解释这些方法的用法:
If(){}else{}:
if小括号里面的内容如果为 真的 则会进入第一个中括号里面执行否则进入else后面的中括号执行;比如
if ( 2==1+1 )
{
echo ‘如果1+1等于2输出这句话’;
}else{
echo’如果1+1不等与2输出这句话’;
}
小阔号里面的内容就是判断语句 ‘==’的意思就是 等不等于 的意思 然后我们就可以知道2==1+1 的意思就是 2等不与1+1 ,然后2等于 1+1 的话就进入if(){ 这里面执行代码 }
Empty():
该函数为判断括号内变量内容是不是为空如果为空返回 true(真) 不为空返回 false
为空包括 0,’0’ , null ,’null’ ,0.0 ,一个声明了但是没有值的变量,一个空数组,false。
Isset():
该函数会判断括号内的变量是否已经设置如果变量内容不为null则返回ture 否则返回false
返回false的情况有 null 但是 null 不等同与 ’null‘
is_stering
如果指定的变量为字符串则返回ture 否则返回 false
in_array( mixed $needle ,array $haystack ,strict )
Needle 必需 规定要在数组中查找的字符串
$haystack 必需 规定要搜索的数组
Strict 可选 如果该参数为true 则in_array检测被搜索的字符串与搜索的字符数组的值类型是否相同。
如果在数组中找到该值者反会ture否则返回false
Php 4.0+起search的参数可以是一个数组
|| 逻辑运算符 或运算 左右有一个为真即可在php中|| 和| 都是短路运算符他们的区别在与优先级不同
Mb_subster(str , start,length,encoding)
Str 必需 为需要提取的字符串
Start 必需 规定在字符串的何处开始 正数从指定位置开始 负数字符串结尾的指定位置开始,0 从第一个字符开始
Length 可选 规定 要返回字符串长度。默认是直到字符串的结尾
Encoding 可选 字符编码。如果省略则使用内部字符编码
Mb_strpos(string,find,start )
该函数为查找一个字符串在另一个字符串首次出现的位置,第一个位置是0第二个位置是1,如果没有找到返回false
String 必需 规定被搜索的字符串。
Find 必需 规定要查找的字符串。
Start 可选 规定开始搜索的位置。
Encoding 参数为字符编码,如果省略或是null则使用内部字符编码
Urldecode()
该函数是对里面的变量进行url编码 ,url编码就是浏览器这里的编码
比如中括号 {} 会被编码为 %7D和%7B ,可以暂时理解为一种加密方式
接下来我们开始做题
经过分析可以得知我们需要进入最有下面的if才可以进行文件包含漏洞利用,我们对传入的值进行构造 ?file=sourece.php?../../../../../../../ffffllllaaaagggg