通过php发送信号进行处理

xxe*_*ixx 3 php shell

我试图通过使用网页中的按钮将kill -10(SIGUSER1)发送到进程ID,我尝试了不同的方法来发送信号,同时将PHP变量(包含PID)传递给shell.以下是我所拥有的:

$next = posix_kill($pid3, 10);
Run Code Online (Sandbox Code Playgroud)

现在,这给了我以下错误:

PHP Warning:  posix_kill() expects parameter 1 to be long, 
              string given in /var/www/parse2.php on line 15
Run Code Online (Sandbox Code Playgroud)

请指教

goa*_*oat 5

大多数php函数会尝试将其参数强制转换为适当的数据类型(如果可能的话).如果可能的话,php函数自动将字符串自动转换为数字类型(如int或float)是非常常见的.

但是,有些只是不是这样编写的,您需要提供手册中指定的数据类型.

"long"是数字类型,因此只需转换为整数.假设$ pid3是一个数字字符串,因此演员表会产生一些明智的结果.

$next = posix_kill((int) $pid3, 10);
Run Code Online (Sandbox Code Playgroud)


Gle*_*las 5

尝试一下:

$next = posix_kill((long)$pid3, 10);
Run Code Online (Sandbox Code Playgroud)

Intval返回一个int,因此警告不会消失,但它可能会起作用

因此,既然您似乎仍然有问题,那就更好了,就像建议的elswhere一样:

$next = posix_kill(intval($pid3), 10);
Run Code Online (Sandbox Code Playgroud)

如果这样不起作用,建议您向我们展示您使用的php版本。

除非您有空格,否则请尝试:

$next = posix_kill(intval(trim($pid3)), 10);
Run Code Online (Sandbox Code Playgroud)

更新:

因此,现在您可以正常运行了,您需要捕获信号并使它执行某些操作,需要附加一个回调函数,因为我不知道其余的代码。您需要这样的东西:

pcntl_signal(SIGUSR1, "sig_handler");
Run Code Online (Sandbox Code Playgroud)

然后在该信号上执行以下操作:

function sig_handler($sig) {

   switch($sig) {
      case SIGUSR1:
         // logtrace(1,"received USR1 signal.");
         break;
   ...
Run Code Online (Sandbox Code Playgroud)

我只想一件事,我假设我们发送信号的过程是一个PHP脚本。否则,我认为您可以使用它,但是还没有做很多事情(尚未完成)

  • 我不知道谁给你投了反对票,但他们需要停下来去别的地方。你似乎是唯一真正想帮助这里的人的人......巨魔 (2认同)