在上面的代码要求我们不能使用数字和字母,我们就要使用一种变换思想
异或
首先我们要知道一种东西叫做函数的动态调用(php7的一种特性)就是在字符串加一个括号就可以调用和字符产同名的函数如下
而其中的字符串可以是各种形式,比如拼接(“php”.“info”)或者运算的结果,因此异或运算的本质就是去的到这样的字符串去括起来,进行命令操作。比如我们可以把一个不能用字母数字的命令进行异或然后再去是用函数的动态调用。
注意:它可能会报警告。
可以通过下面的代码进行异或。
取反
以下是取反代码
对system取反可以得到
输入的时候里面的括号是可以删除的
例题
要求步大于18,\w表示数字字母下划线都不能用,然后后面的异或 括号 取反等等都不可使用,
其实很简单,只需要
就可以了。那为什么呢?
首先要知道?>是什么意思,他是结束php, <?是另一个php起始,正常情况php代码标签是<?php,如果没有php那就是一个短标签(short_tag) 。<?=的意思是echo ,比如<?="abc";就是输出abc。
那么这一串什么意思呢?` `是系统命令shell_exec的意思,然后%20是空格,*是任意长度,起那面的?是单个长度,那么/???/???*就是想找/bin/cat*。*可以代表flag.php因此就可以找到flag。但是由于符合这种样式的太多了,所以就要运行好一会,会有很长的结果,就需要我们去慢慢找。
echo太长并且不能用因此使用短标签,但是注意要先结束?>。
Creat_function()
他有两个参数,一个来数入参数,code可以来进行之后的操作,因此存在一个代码的注入,我们可以在code里面操作, 先加入一个}结束上面的函数然后加入我们的eval函数,但是会多出来一个}因此需要我们在后面加上//去注释掉它。