[HCTF 2018]WarmUp
打开是个笑脸,源代码给了个地址
进来是个php代码页面
highlight_file(__FILE__); //打印代码
class emmm //定义emmm类
{
public static function checkFile(&$page)//将传入的参数赋给$page
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//声明$whitelist(白名单)数组
if (! isset($page) || !is_string($page)) {//若$page变量不存在或非字符串
echo "you can't see it";//打印"you can't see it"
return false;//返回false
}
if (in_array($page, $whitelist)) {//若$page变量存在于$whitelist数组中
return true;//返回true
}
$_page = mb_substr(//该代码表示截取$page中'?'前部分,若无则截取整个$page
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);//url解码$page
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
上面是过滤内容,下面是传入参数
1.第一个if语句对变量进行检验,要求$page为字符串,否则返回false
2.第二个if语句判断$page是否存在于$whitelist数组中,存在则返回true
3.第三个if语句判断截取后的$page是否存在于$whitelist数组中,截取$page中'?'前部分,存在则返回true
4.第四个if语句判断url解码并截取后的$page是否存在于$whitelist中,存在则返回true
若以上四个if语句均未返回值,则返回false
有三个if语句可以返回true,第二个语句直接判断$page,不可用
第三个语句截取'?'前部分,由于?被后部分被解析为get方式提交的参数,也不可利用
第四个if语句中,先进行url解码再截取,因此我们可以将?经过两次url编码,在服务器端提取参数时解码一次,checkFile函数中解码一次,仍会解码为'?',仍可通过第四个if语句校验。('?'两次编码值为'%253f'),构造url:
为啥中间有很多…/呢,是因为不知道文件目录
试出来的。
[极客大挑战 2019]Havefun
输入源码有代码,输入cat=dog即可,很简单我就不写了
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210616204239275.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9n在这里插入图片描述
LmNzZG4ubmV0L2ppZV9h,size_16,color_FFFFFF,t_70)
[极客大挑战 2019]Http
看到http 先抓个包再说
发现个php文件
他意思得来自
https://www.Sycsecret.com
请求头添加
Referer:https://www.Sycsecret.com
然后还让我们用这个浏览器
改下User-Agent:Syclover
然后让我们本地访问
X-Forwarded-For:127.0.0.1
然后flag就出来了