攻防世界----ics-05

拿到靶场后,做一下目录扫描

攻防世界----ics-05_第1张图片

1.访问 /start.sh

攻防世界----ics-05_第2张图片

获得了网站的路径

2.访问/index.php/login

攻防世界----ics-05_第3张图片

攻防世界----ics-05_第4张图片

 拿到一个page的参数,因为page的内容是可以回显的因此尝试利用伪协议读取任意文件漏洞

?page=php://filter/read=convert.base64-encode/resource=index.php
?page=file:///var/www/html/index.php

两种方法都尝试,发现php伪协议成功拿到源码

攻防世界----ics-05_第5张图片

将这一串源码拿去base64解密(因为我们读取源码采用了base64加密) 

攻防世界----ics-05_第6张图片

对源码进行过滤,发现利用点

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

    echo "
Welcome My Admin !
"; $pattern = $_GET[pat]; $replacement = $_GET[rep]; $subject = $_GET[sub]; if (isset($pattern) && isset($replacement) && isset($subject)) { preg_replace($pattern, $replacement, $subject); }else{ die(); } }

知识点1: xff伪造

就是在Host下面添加一条 X-Forwarded-For

如果不行的话说明位置不对,或者空格少了

攻防世界----ics-05_第7张图片

 知识点2 preg_replace() /e 漏洞

preg_replace() 函数,该函数执行一个正则表达式的搜索和替换。

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

参数说明:

  • $pattern: 要搜索的模式,可以是字符串或一个字符串数组。

  • $replacement: 用于替换的字符串或字符串数组。

  • $subject: 要搜索替换的目标字符串或字符串数组。

  • $limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。

  • $count: 可选,为替换执行的次数。

源码中

pat传入一个正则,rep传入命令执行的函数,sub需要和pat的正则进行匹配

/e 的原理就是 搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换,然后执行sub的内容

攻防世界----ics-05_第8张图片

如图,命令被执行了

接下来就是常规的命令执行,找flag

 攻防世界----ics-05_第9张图片

 由于空格会导致字符失效,因此,利用+来替代空格(url中+就是空格)

攻防世界----ics-05_第10张图片

 攻防世界----ics-05_第11张图片

 攻防世界----ics-05_第12张图片

你可能感兴趣的:(web相关,安全)