web 1

二、 命令执行
2.1 rce中常用的php代码执行函数
eval() ,     assert() ,      preg_replace(),     create_function() ,      array_map(),  call_user_func()/call_user_func_array() , array_filter() , usort()/uasort() , file_put_contents()
      1)eval() 函数把字符串按照 PHP 代码来计算
           eval函数的参数的字符串末尾一定要有分号,在最后还要另加一个分号;
           如果参数中带有变量时,并且变量有赋值操作的话,变量前的$符号钱一定要有\来转义。如果没有赋值操作可以不需要。
      2)assert()
            assert 函数 是直接将传入的参数当成 PHP代码 直接, 不需要以分号结尾 ,当然你加
上也可以。
      3)preg_replace()
preg_replace(
string|array $pattern,
string|array $replacement,
string|array $subject,
int $limit = -1,
int &$count = null
): string|array|null 7
搜索 subject 中匹配 pattern 的部分,以 replacement 进行替换。
       4) create_function()
             通过传递的参数创建一个匿名函数,并且返回函数的一个名字。
create_function(string $args, string $code): string
第一个参数是函数接受的参数,第二个参数是函数的执行体
       5)array_map()
            为数组的每个元素应用回调函数
array_map(callable $callback, array $array, array ...$arrays): array

        6)call_user_func()/call_user_func_array()(返回回调函数的返回值)

                  call_user_func() ----------把第一个参数作为回调函数调用
                 call_user_func(callable $callback, mixed $parameter = ?, mixed $... = ?): mixed
             第一个参数是被调用的回调函数,后面的参数是函数的形参
                 
                 call_user_func_array() -------- 调用回调函数,并把一个数组参数作为回 调函数的参数
                  call_user_func_array(callable $callback, array $param_arr): mixed
         7) array_filter()
                使用回调函数过滤数组的元素。
                array_filter(array $array, ?callable $callback = null, int $mode = 0): arr ay
                遍历 array 数组中的每个值,并将每个值传递给 callback 回调函数。 如果 callback 回调            数返回 true ,则将 array 数组中的当前值返回到结果 array 数组中。
         8)usort()/uasort()( PHP: usort - Manual
                使用用户自定义的比较函数对数组中的值进行排序。
                usort(array &$array, callable $callback): bool
                本函数将用用户自定义的比较函数对一个数组中的值进行排序。 如果要排序的数组需要
        用一种不寻常的标准进行排序,那么应该使用此函数。
          9) file_put_contents()/fputs()
                将一个字符串写入文件
          10) 动态函数构造:
<?php
a=assert&b=system('ls')
$_GET['a']($_GET['b']);
?>
2.2 rce中常用的包含文件函数
     1)include
            当包含 .php 文件时,可同时运行(引用include传参绕过)
      2) highlight_fifile(别名show_source )
            语法高亮一个文件,即将文件内容全部展示出来(高亮flag文件 highlight_file 'flag.php'
            highlight_file(string $filename, bool $return = false): mixed
2.3 常见的系统执行函数
system、shell_exec、exec、popen、passthru
      1)system
             将字符串作为 OS命令 去执行,并且 自带输出功能
             system(string $command, int &$return_var = ?): string
      2) shell_exec()
             通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。 只返回字符串, 不会          进行输出该函数和 反引号 `` 的执行效果一致
             shell_exec(string $cmd): string
      3) exec
            将字符串作为 OS命令 去执行,但是自身 不带输出功能,需要写入输出功能的代码
             exec(string $command, array &$output = ?, int &$return_var = ?): string
            本函数执行输入 command 的外部程序或外部指令。它的返回字符串只是外部程序执行后         返回的最后一行;若需要完整的返回字符串,可以使用 PassThru() 这个函数。
      4) popen
             打开进程文件指针
            popen ( string $command , string $mode ): resource
            打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。
      5) passthru
             执行外部程序并且 自带输出功能
            passthru ( string $command , int &$return_var = ? ): void
             exec() 函数类似, passthru() 函数也是用来执行外部命令( command )的。 当 所执行的 Unix 命令输出二进制数据,并且需要直接传送到浏览器的时候,需要用此函 数来替代 exec() system() 函数。 常用来执行诸如 pbmplus 之类的可以直接输出图 像流的命令。通过设置Content-type 为 image/gif , 然后调用 pbmplus 程序输出 gif 文件, 就可以从 PHP 脚本中直接输出图像到浏览器。
2.4 其他命令执行函数
      PHP exec shell_exec system passthru popen proc_open
      ASP.NET System.Diagnostics.Start.Process System.Diagnostics.Start.Proces sStartInfo
      Java java.lang.runtime.Runtime.getRuntime java.lang.runtime.Runtime.exec
2.5 积累
       php 中不需要括号的函数
               echo 111; print 123; die;include " "; require " ";include_once " " ; require_once " "
系统命令 :
1. 里可以用 ? 匹配字符
2. 可以用 ; 间隔两条命令
3. $? // 上一次命令执行成功为 0 ,不成功为 1
4. env 查看本地变量
5. `` $() 可以代替 shell_exec 执行系统命令 //web396
6. nl * 打开目录下所有文件
PHP: 1. <?= ?>===<?php ?>                2.目录:cd和%
2.6 正则(安全的一道重要防线)
      正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值