Php命令执行:

常见能够执行操作系统的命令函数:

image-20240719210929776

要知道这几种函数是 怎么运行 运行条件 参数 能否回显

system:

image-20240719220623196

第一个参数为我们要执行的命令 第二个参数为将运行结果的状态返回到变量中

可以直接执行系统命令 并且有直接的回显

exec:

image-20240719221107836

exec会将command的结果每一行以数组的形式写入第二个参数上,如果没有设置第二个参数 那么我们打印结果就只会有最后一行的结果

可以直接执行系统命令 但是如果没有第二个参数就只会回显最后一行

有第二个参数时需要借用打印函数 (print_r()),就可以回显全部

passthru:

image-20240719221746520

跟system函数很像 可以直接回显

shell_exec:

image-20240719222333658

没有回显 需要借用打印函数 跟反引号命令执行类似

popen:

image-20240721140954353

image-20240721153544364

proc_open

image-20240721154114130

前三个是必要的参数

image-20240721154334846

image-20240721154406274

这个也是不能直接回显的 需要搭配 stream_get_contents来进行输出

stream_get_contents 是 PHP 中用于从一个流(stream)中读取所有数据的函数。它的作用是将一个流的内容全部读取到一个字符串中,并返回这个字符串。

pcntl_exec

image-20240721155705660

LD_PRELOAD绕过:

image-20240722203239152

image-20240722205328564

image-20240722205510497

我们通过资料可以知道

image-20240722205957950

当我们调用mail函数时 会调用geteuid这个系统文件,然后我们可以使用LD_PRELOAD函数来进行自己先写一个名字一样的假文件,因为在我们使用LD_PRELOAD函数时,会优先调用我们写的这个,所以可以让我们在自己编辑的文件中写入危险函数

image-20240722205913913

image-20240722210328344

这样就会在执行mail函数的时候 先来执行我们自己定义的demo.so文件

空格过滤绕过:

image-20240725215528918

文件名绕过:

image-20240725215909042

image-20240725221056410

反斜杠可以剥夺字符的功能,使他成为一个真正意义上的字符

特殊变量$1没有什么具体意义,相当于一个用来分隔被过滤字符的作用

内联执行:

image-20240725221432205

利用环境变量:

image-20240725221527972

相当于在环境变量这一组字符串中取我们需要的字符