本题过滤了flag system php cat sort shell . 空格 ' ` echo ; (
本题主要是过滤了(,导致大部分函数都无法使用,因为echo和`被过滤,所以无法使用echo``,
所以再来学一个新姿势
文件包含+php伪协议
先上实操
解法1
解法2
然后解码
先是文件包含
include包含:遇到错误会警告,但不会停止
require包含:遇到错误会警告,但会停止
include_once:与include差不多,但只包含一次
require:与require差不多,但只包含一次
include$_GET[1]?>&1=
这段的意思就是包含一个名为1的文件以GET的方式上传,然后用连接符&来连接1的内容。
然后是php伪协议
php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行,从而导致 任意文件读取。
convert.base64-encode & convert.base64-decode
等同于base64_encode()
和base64_decode()
,base64编码&解码
resource=<要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流。(相对路径也可)
?c=include$_GET[page]?>&page=php://filter/convert.base64-encode/resource=flag.php
这句话的翻译一下就是:
包含一个名为page的文件以GET的方式上传,然后用连接符&来连接page的内容。
然后php://filter可以获取指定文件源码(resource=flag.php)。
convert.base64-encode对resource指定的数据(flag.php)进行base64编码。
最后将回显的码进行解码,就可以得到flag。
web32-36都可以用这个办法,我就不一一说了。