记录下遇到过的PHP危险函数
0x01 escapeshellarg()与escapeshellsmd()联合
先给出官方的定义:
escapeshellarg ( string $arg ) : string
将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。
对于用户输入的部分参数就应该使用这个函数。shell 函数包含 exec(), system() 执行运算符 。
该函数单独使用的时候,是安全的,但是当与escapeshellcmd函数一起使用,且先使用escapeshellarg,再使用escapeshellcmd函数,就可能出现危险操作
escapeshellarg函数先将$arg变量里的单引号进行转义,变成 \‘,当所有单引号都被转义之后,再在左右加上单引号(‘\‘‘),再到escapeshellcmd函数的时候
scapeshellcmd会将$arg变量里面的这些字符之前加了反斜杠(\):&#;`|*?~<>^()[]{}$\, \x0A 和 \xFF。 ‘ 和 " 仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 % 和 ! 字符都会被空格代替。
通过这两个函数,可以通过特殊的构造,来实现单引号的逃逸,进而shell函数,达到读取信息。
在BUUCTF平台上Online Tool这个web题里面学习到的构造,变量首尾用单引号。具体可以看我BUUCTF复现2。
原文地址:https://www.cnblogs.com/mortals-tx/p/11406616.html
时间: 2024-10-28 15:15:07