刷题日记1(buuctf web题)

一、[极客大挑战 2019]EasySQL

这题用的是sql注入,什么是sql注入?

SQL注入就是在用户输入的字符串中添加SQL语句,如果在设计不良的程序中忽略了检查,那么这些注入进去的SQL语句就会被数据库服务器误认为是正常的SQL语句而运行,攻击者就可以执行计划外的命令或者访问未授权的数据。

题解参考1
参考2
下面是我的题解1:

一般的验证语句为:select * from table_name where username=’ ’ and password =’ ’

当我们输入账号为admin’ or 1=1#时,语句为:
select * from table_name where username=‘admin’ or 1=1#’ and password =‘xxx’

注意此时的就是username=admin or 1=1 (#或者–表示把后面东西注释掉)
直接登陆上

万能密码表
所谓的万能密码就是绕过登录验证直接进入管理员后台的密码,这种类型的密码可以通用到很多存在此漏洞的网站,所以称之为万能。万能密码表链接(也就是上面的参考题解1)

总结:
账号 'or 1=1 #
密码任意
(这个很好用!)

下面是我的题解2:

用or和and的优先级,and的优先级更高
用户名随便输入,啥都行,只需要密码是1’ or ‘1’='1

**username=‘amdin’ and password=‘1’ or ‘1’=‘1’
后面正确 直接登陆成功
在这里插入图片描述

二、[极客大挑战 2019]Havefun

在这里插入图片描述

这题查看一下源代码,注释里说当对cat传参后cat等于dog就会输出flag,
那就在url后面加上/?cat=dog

在这里插入图片描述

三、[HCTF 2018]WarmUp

F12分析一下源代码
什么是payload参考

在计算机科学与电信领域,负载(英语:Payload)是数据传输中所欲传输的实际信息,通常也被称作实际数据或者数据体。信头与元数据,或称为开销数据,仅用于辅助数据传输。
比如有一位客户需要支付一笔费用委托货车司机运送一车石油,石油本身的重量、车子的重量、司机的重量等等,这些都属于载重(load)。但是对于该客户来说,他关心的只有石油的重量,所以石油的重量是有效载重(payload,也就是付费的重量)。
在这里插入图片描述

先了解几个函数:

  • in_array函数是检查数组中是否存在某个值(找到true;找不false),特别注意这是在数组的键值中找,不包括键
  • mb_strpos查找目标首次出现的位置,从0开始
  • mb_substr返回字符串,特别注意的是:mb_strpos获取的数字,在mb_substr不是从0开始,而是代表返回的长度

几个题解:详解1 详解2 详解3
关于头文件的引用:题外知识,只是刚好看到

用尖括号引入标准头文件,使用双引号来引入自定义头文件(自己编写的头文件),这样就很容易区分头文件的区别。

解题过程:

首先进行代码审计,(不会php,代码注释放在此题下面,可能理解有误)
那先了解一下函数:

  • mb_substr(str1,start,[length][,[str2]]):是在str1从start开始length为长度截取字符串,str2是表示字符编码

  • mb_strpos(str1,str2):查找str2在str1中出现的位置

拼接起来就是:
mb_substr($page,0,mb_strpos($page . '?', '?'))就是在$page?里面匹配第一个问号,有两种可能:

如果$page=123456, $page . '?' = 123456? 那么就返回int(6) $_page=123456

如果$page=123?456, $page . '?' = 123?456? 那么就返回int(3) $_page=123

这个if语句也是判断$_page是否在白名单里,很显然我们无法绕过这个判断机制

发现有一个include包含函数,include函数就是引用后面所用的内容,就像include(./1.txt)用的是REQUEST传参(REQUEST传参就是可以接受POST传参,也可以接受GET传参),方便一点可以通过GET传入

构造一下payload就是
url?file=source.php?/…/…/…/…/ffffllllaaaagggg
首先存在白名单,然后过滤一次得到url?file=source.php,仍存在白名单,再过滤因为没有?保持原样,仍存在白名单,得到flag

这里的多层目录可以通过文件名四个f,l,a,g猜出来,这里不太理解url编码的用意,如果url编码两次,用url?file=source.php%253f/…/…/…/…/ffffllllaaaagggg也可以得到flag
在这里插入图片描述

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

            if (in_array($page, $whitelist)) {//in_array() 函数搜索数组中是否存在指定的值。
                return true;//检测传进来的值是否匹配白名单列表$whitelist
            }

            $_page = mb_substr(//过滤问号的函数(如果$page的值有?则从?之前提取字符串),返回一部分
                $page,
                0,
                mb_strpos($page . '?', '?')//返回某个字符串在别个字符串首次出现的位置
            );
            if (in_array($_page, $whitelist)) {
                return true;//再次查找page是否在白名单内
            }

            $_page = urldecode($page);//对page进行一次url解码//此我们将?经过两次url编码,在服务器端提取参数时解码一次
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')//再次进行一次截断,获取?之前的内容
            );
            if (in_array($_page, $whitelist)) {//再次白名单
                return true;
            }//总结:判断(要有source.php或者hint.php),过滤?,判断(?前保留并且仍有file),url解码(?两次编码,感觉不编码也行,因为前面已经把这个?过滤掉了),过滤?(已经没有问号了,原样file=source.php),判断
            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\" />";
    }  
?> 

四、[ACTF2020 新生赛]Include

点击提示得到下图,注意url最后是?file=flag.php

在这里插入图片描述
用伪协议,构建
url?file=php://filter/read=convert.base64-encode/resource=flag.php

在这里插入图片描述
得到的是经过base64编码后的,解码看看吧

在这里插入图片描述
得到flag
参考链接

总结:
在CTF 比赛中,php://filter 常用于读取一个页面的源码
格式:http://XXX/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

五、[ACTF2020 新生赛]Exec

输入127.0.0.1|ls /查看根目录

在这里插入图片描述

可以看到里面有个flag,那就cat一下吧

cat命令的用途是连接文件或者标准输入并打印。这个命令常用来显示文件内容,或者将几个文件拼接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。
详见:linux之cat命令

几种输入都可以,这道题就是利用管道符来做

可以直接在ping输入框中输入1;cat /fag;也可以 1|cat /flag 1&cat /flag

当然如果使用 ||必须需要前面是一个假的,就是前面条件为假才执行后面的,否则只执行前面的,所以可以用 a||cat /flag

管道符:
1、|(就是按位或),直接执行|后面的语句
2、||(就是逻辑或),如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
3、&(就是按位与),&前面和后面命令都要执行,无论前面真假
4、&&(就是逻辑与),如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
5、; 前后都执行,无论前面真假,同&,(linux也有)
转载自:BUUCTF [ACTF2020 新生赛]Exec

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值