白癜风专家彭洋 http://m.39.net/news/a_9222080.html.声明:本人只是分享一些床长人工智能教程相关的免费杂文而已,并非床长人工智能网校的收费文章。文章目录闲扯代码执行和命令执行的区别回调函数可变函数的模式双引号导致代码执行修复方案闲扯菜鸡的我被拒绝了,有点悲丧,努力吧。这些内容是看视频学的,有些点还比较有用,尤其是那里,经常遇到了但是利用不了。代码执行和命令执行的区别代码执行是执行脚本代码,执行的是命令执行是执行系统命令,执行的是。但是我们也可以通过代码执行调用函数,来达到命令执行的效果,所以有时候就搞不清两者的区别。这两个函数都可以将字符串转换为代码执行函数把字符串按照代码来计算。该字符串必须是合法的代码,且必须以分号结尾。如果是字符串,它将会被当做代码来执行。本地测试换成也是可以的代码执行导致的命令执行回调函数一般就是,回调函数的意思就是代表他们可以调用其他函数。审计的时候发现,一般我们传入的函数都有白名单限制的,很难受。解释拿来说,我们在第一个参数处传入要执行的函数名,后面的参数都是我们指定函数所需要的参数。我们传入就可以代码执行了。例子本地测试这里又和版本有关系了,的不行,我用的成功了,但是这个函数的确是支持的,没搞懂这里不能使用函数,查官方文档才找到原因可变函数解释可以通过把函数名赋值给变量,然后用变量来调用函数的功能。本地测试这里又不能使用函数,再去看官方文档,没看到有提,但是也举例了几个不能用的,所以猜测应该也在这个列表里。的模式解释小于的版本中,存在模式修正符,允许代码执行。它的第二个参数位置就填我们要执行的代码。例子本地测试可控点在第三个参数代码解释是表示匹配除换行符等以外的字符,加上括号是表示取出这部分内容,\\是代表第一个里的缓冲区内容,这里就是匹配出了可控点在第二个参数那就直接输入执行了可控点在第一个参数这里又要用到双引号的特性了,这个点在下面会说发现使用单引号包围第一个参数的话失败,下面用双引号尝试成功双引号导致代码执行在中,双引号里面如果包含有变量,解释器会进行解析单引号中的变量不会被处理。再结合可变变量的特性,在里的代码就会被执行,具体看下面的例子。这个特性单用比较鸡肋,原因下面会说。例子我们可以看到,直接在双引号内输入会成功但是我们改成传参却不行了我们尝试直接在本地赋值,发现也不行但是我们不给加引号包裹能成功那么失败的原因就是,我们传参进入的变成了字符串,导致不能执行。因为没找到官方文档解释,我的猜测理解是这样的,遇到双引号内有变量的时候,就会进行解析,所以先解析了或者,但是这个时候双引号被用掉了,内层的没办法被解析了,就代表只有这个字符串,但是没有被当成代码解析。这只是我的猜测,所以这个双引号的特性会配合的模式一起使用。修复方案尽量不要执行外部传入的参数过滤所有输入。。。
转载请注明:http://www.aierlanlan.com/tzrz/6262.html