zoukankan      html  css  js  c++  java
  • Web_php_include-攻防世界

    0x00 简介

    记录这个题纯粹是为了记录以下有关strstr()函数的相关知识。

    0x01 题目

    <?php
    show_source(__FILE__);
    echo $_GET['hello'];
    $page=$_GET['page'];
    while (strstr($page, "php://")) {
        $page=str_replace("php://", "", $page);
    }
    include($page);
    ?>

    其中的涉及了两个函数:strstr()函数、str_replace()函数。

    strstr函数:strstr(字符串,你要搜索的内容,false)

    括号里面有三个部分:

    1.字符串:也就是上面的$page。例如:在url后面添加 /?page=123456,那么$page的内容就是123456。

    2.你要搜索的内容:也就是题目中的php://。意思就是该函数会从$page的内容里去寻找php://,而这里是一个while语句,一旦查找到php://,那么就会执行大括号里面的语句。

    例如:我的url是

    http://111.198.29.45:50769/?page=php.php://input

    那么传入的$page的内容就是php://input,而前面的“php.”就会被丢弃。

    3.false:我这里写false的原因是该参数默认是false。也就是一般情况只需要写前两个参数即可。false代表匹配到php://之后,会输出php://和之后的内容。而如果为true,则会输出“php.”,也就是php://前面的内容。

    注:strstr函数对大小写敏感,也就是会区分大小写。

    str_replace函数:这个函数的作用是将匹配到的php://全部替换为空。

    例如:str_replace(“1”,“2”,“123”)会输出223。因为会将全部的1替换为2。(同样区分大小写)

    解法就不细说了,本意只是为了记录一下函数。

    将php://改为PHP://即可,因为strstr函数对大小写敏感。

    http://111.198.29.45:50769/?page=PHP://input

    burp抓包,post传参:<?php system("ls");?>

    就会看到3个文件,再使用<?php system("cat fl4gisisish3r3.php");?>便能拿到flag。

    然后就是还可以利用data://伪协议来解题。

    data://伪协议

    php5.2.0起,数据流封装器开始有效,主要用于数据流的读取。如果传入的数据是PHP代码,就会执行代码

    使用方法:data://text/plain;base64,xxxx(base64编码后的数据)

  • 相关阅读:
    Django Admin后台管理用户密码修改
    【LOJ】#2122. 「HEOI2015」小 Z 的房间
    【LOJ】#2116. 「HNOI2015」开店
    【LOJ】#2117. 「HNOI2015」实验比较
    【LOJ】#2118. 「HEOI2015」兔子与樱花
    【LOJ】#2114. 「HNOI2015」菜肴制作
    【LOJ】#2115. 「HNOI2015」落忆枫音
    【LOJ】#2111. 「JLOI2015」战争调度
    【LOJ】#2110. 「JLOI2015」管道连接
    【LOJ】#2109. 「JLOI2015」骗我呢
  • 原文地址:https://www.cnblogs.com/-an-/p/12345518.html
Copyright © 2011-2022 走看看