1.头头是道
直接查看网络得到flag
2.warm_up
这里提示要用他的电脑才能打开,即本地打开这个网站即
X-Forward-For 为本地即127.0.0.1
这里要通过jiaran BiliBili Home Page
直接在hackerbar中再加上jiaran BiliBili Home Page
得到flag
3.EZphp
<?php
include 'flag.php';
extract($_GET);
if (isset($wsf)) {
$xmm = trim(file_get_contents($zm));
if ($xmm == $wsf) {
if (!empty($xlq)) {
$xw = trim(file_get_contents($fn));
if ($xlq === $xw) {
echo "<p>$flag</p>";
} else {
echo '<p>no no no </p>';
}
} else 'You cant do that!!';
} else {
echo 'hacker!!';
}
} else {
highlight_file(__FILE__);
}
?>
这里有两个知识点
第一个是extrace()函数的使用
即
extract($_GET);
if (isset($wsf)) {
$xmm = trim(file_get_contents($zm));
if ($xmm == $wsf) {
这里有4个函数
1.extrace ()
这里使用菜鸟对他的解释
extract() 函数从数组中将变量导入到当前的符号表。
该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。
该函数返回成功设置的变量数目
我们可以看到extract 改变了原来变量$a
2.trim
trim() 函数移除字符串两侧的空白字符或其他预定义字符。
在这里不重要
3.file_get_contents()
file_get_contents() 把整个文件读入一个字符串中。
该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能
4.isset
isset() 函数用于检测变量是否已设置并且非 NULL。
如果已经使用 unset() 释放了一个变量之后,再通过 isset() 判断将返回 FALSE。
若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。
到这我们明白了这里的4个函数的作用
这里关键是if ($xmm == $wsf) 只要我们构建$xmm=$wsf就可以了 而$xmm=$zm 即$wsf=$zm就可以了
这里使用?wsf=&zm= ;$wsf= 代表wsf为空&联合执行 zm= 代表zm=空
现在我们绕过第二部分的代码
if (!empty($xlq)) {
$xw = trim(file_get_contents($fn));
if ($xlq === $xw) {
echo "<p>$flag</p>";
这里empty函数代表
empty() 函数用于检查一个变量是否为空。
empty() 判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于 FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告
这里这道题目的考点是file_get_contents()函数绕过
绕过方法:
使用php://input伪协议绕过
1、将要GET的参数?xxx=php://input
用post方法传入想要file_get_contents()函数返回的值
2、用data://伪协议绕过
将url改为:?xxx=data://text/plain;base64,想要file_get_contents()函数返回的值的base64编码
或者将url改为:?xxx=data:text/plain,(url编码的内容)
这里我们使用第一种伪协议绕过
php://input的使用方法
$data = file_get_contents("php://input");
在这里fn通过php://input的方法来传递参数即$xw等于用post方法传入想要file_get_contents()函数返回的值
所以我们用post给fn变量设置为fn=1
通过要通过slq=xw 即slq=fn=1代表slq变量的值为fn=1与通过伪协议传递的fn的值为fn=1相同
在这里也不一定要为fn因为是值所以可以顺便填写