记xctf_web ics-05

刚打开网站

点击各个按钮发现除了一个index页面,没有别的变化。

尝试扫描,没扫出东西,看来问题就在这个index页面上了

记xctf_web ics-05_第1张图片

这里我尝试查看了源码,并没有发现啥有用的东西。

只有一个可传参的参数page。

拜读了大佬的攻略,才发现可以利用文件读写漏洞读取源码。

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

php://filter是PHP语言中特有的协议流,作用是作为一个“中间流”来处理其他流。

之所以使用convert.base64-encode是因为不对读取的代码进行加密的话直接读取,读取的代码会作为php文件被执行。效果如下:

记xctf_web ics-05_第2张图片

也就是说这里的convert.base64-encode只是为了是防止代码直接被执行,因此使用其他的协议也是可以直接读取到代码的,

如:

page=php://filter/read=string.rot13/resource=index.php

 

读取到代码后进行解密,经过代码审计,其中关键源码如下:

记xctf_web ics-05_第3张图片

不难看出当用户提交的响应头中包含:X-Forwarded-For:127.0.0.1时,服务器会响应这段代码。

程序进入此段函数后,会读取pat,rep,sub三个参数的值,如果存在则执行preg_replace()函数。

这里就有我们可以利用的地方了。

preg_replace()存在执行漏洞。当正则表达式pattern以/e结尾时replacement的值会被作为php函数执行。

构造链接index.php?pat=/test/e&rep=system('ls')&sub=test

这里想要执行函数应该用system,因为system是执行并输出结果。如果使用exec执行无法在页面显示结果。

显示结果如下:

记xctf_web ics-05_第4张图片

这个我们查看一下 可疑的s3chahahaDir ,果然存在一个flag目录,目录下就是flag文件

执行pat=/test/e&rep=system('cat s3chahahaDir/flag/flag.php');&sub=test

成功拿到flag

 

 

你可能感兴趣的:(ctf)