Bug #80616 [NEW]: #PHP Fatal error: Uncaught Error: Call to undefined function posix_initgroups(

From: Date: Mon, 11 Jan 2021 18:01:29 +0000
Subject: Bug #80616 [NEW]: #PHP Fatal error: Uncaught Error: Call to undefined function posix_initgroups(
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-231494@lists.php.net to get a copy of this message
From:             kucherdominikus at yahoo dot de
Operating system: Fedora release 33 (Thirty Three)
PHP version:      7.4.14
Package:          *General Issues
Bug Type:         Bug
Bug description:#PHP Fatal error:  Uncaught Error: Call to undefined function posix_initgroups(

Description:
------------
[root@srv-schnapsverein:/data/fileserver/software/dksoftware]$php
honeypot1.php 
#PHP Fatal error:  Uncaught Error: Call to undefined function
posix_initgroups() in
/data/fileserver/software/dksoftware/honeypot1.php:54
Stack trace:
#0 {main}
  thrown in /data/fileserver/software/dksoftware/honeypot1.php on line
54


Test script:
---------------
<?php declare(strict_types=1);
// Dominik Kucher

/******** zeige alle Fehler an *******/
error_reporting(E_ALL);

/*************Socket Server**********/
set_time_limit (0);

/** set the ip and port we will listen on */
$ipaddress = '0.0.0.0';
$port = 119;

/** signal handler to close sockets at SIGTERM */
declare(ticks=1000);
pcntl_signal(SIGUSR1, 'hp_sig_handler');

/** create a tcp socket */
if(($sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false)
{
 exit('socket_create() failed: ' .
socket_strerror(socket_last_error()));
}

/** enable capability to listen on 0.0.0.0:25 and at the same time with
own instances on sepcific local addresses*/
if(@socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1) === false)
{
 exit('socket_set_option(SO_REUSEADDR) failed: ' .
socket_strerror(socket_last_error()));
}
if(@socket_set_option($sock, SOL_SOCKET, SO_REUSEPORT, 1) === false)
{
 exit('socket_set_option(SO_REUSEPORT) failed: ' .
socket_strerror(socket_last_error()));
}

/** bind socket */
if(@socket_bind($sock, $ipaddress, $port) === false)
{
 exit('socket_bind() failed: ' . socket_strerror(socket_last_error()));
}

/** start listening */
if(@socket_listen($sock, 100) === false)
{
 exit('socket_listen() failed: ' .
socket_strerror(socket_last_error()));
}
/** switch to non-blocking mode to receive signals correctly */
else
{
 socket_set_nonblock($sock);
}

/** drop privileges to 'nobody' */
$nobody_group = 99;
$nobody_user = 99;
if(!posix_initgroups('nobody', $nobody_group) ||
!posix_setgid($nobody_group) || !posix_setuid($nobody_user))
{
 exit("DROP PRIVILEGES FAILED STAGE 1\n");
}
if(posix_getuid() !== $nobody_user || posix_geteuid() !== $nobody_user
|| posix_getgid() !== $nobody_group || posix_getegid() !==
$nobody_group)
{
 exit("DROP PRIVILEGES FAILED STAGE 2\n");
}

/** fake banners of known vulnerable service */
switch($port)
{
 case 21:   $response = "220 ProFTPD 1.3.1rc2 Server"; break;
 case 22:   $response = "SSH-2.0-Serv-U_7.0.0.2"; break;
 case 23:   $response = "AIX Version 5 (C) Copyrights by IBM and by
others 1982,2000."; break;
 case 80:   $response = "HTTP/1.1 200 OK"; break;
 case 110:  $response = "+OK Microsoft Exchange POP3 server version
6.5.6803.0 (127.0.0.1) ready"; break;
 case 119:  $response = "200 OK Microsoft Exchange Internet News Service
Version 5.5.2448.8 (posting allowed)"; break;
 case 143:  $response = "* OK Microsoft Exchange IMAP4rev1 server
version 5.5.2448.8 (127.0.0.1) ready"; break;
 case 443:  $response = "HTTP/1.1 200 OK"; break;
 case 465:  $response = "220 127.0.0.1 ESMTP SonicWALL (8.0.4.2611)";
break;
 case 631:  $response = 'HTTP/1.1 200 OK'; break;
 case 873:  $response = '@RSYNCD: 30.0'; break;
 case 783:  $response = 'SPAMD'; break;
 case 902:  $response = '220 VMware Authentication Daemon Version 1.10:
SSL Required, ServerDaemonProtocol:SOAP, MKSDisplayProtocol:VNC ,
VMXARGS supported, NFCSSL supported'; break;
 case 993:  $response = "* OK Microsoft Exchange IMAP4rev1 server
version 5.5.2448.8 (127.0.0.1) ready"; break;
 case 995:  $response = "+OK Microsoft Exchange POP3 server version
6.5.6803.0 (127.0.0.1) ready"; break;
 case 3306: $response =
base64_decode('UgAAAA0KNS41LjQ5LWNsbC1sdmUABwEAAHEqe01QKXpNAP8FAgAPwBUAAAAAAAAAAAAAUTA8eW9C'
. "\n" . 'OTdGOzQzAG15c3FsX25hdGl2ZV9wYXNzd29yZAANCg=='); break;
 case 3310: $response = 'PONG'; break;
 case 3389: $response = "\x03\x00\x00\x0b\x06\xd0"; break;
 case 5222: $response = '<?xml version=\'1.0\'?><stream:stream
xmlns:stream=\'http://etherx.jabber.org/streams\'
xml:lang=\'en\'
from=\'\' xmlns:db=\'jabber:server:dialback\' to=\'\'
xmlns=\'jabber:server\'><stream:error><connection-timeout
xmlns=\'urn:ietf:params:xml:ns:xmpp-streams\'/></stream:error></stream:stream>';
break;
 case 5269: $response = '<?xml version=\'1.0\'?><stream:stream
xmlns:stream=\'http://etherx.jabber.org/streams\'
xml:lang=\'en\'
from=\'\' xmlns:db=\'jabber:server:dialback\' to=\'\'
xmlns=\'jabber:server\'><stream:error><connection-timeout
xmlns=\'urn:ietf:params:xml:ns:xmpp-streams\'/></stream:error></stream:stream>';
break;
 case 5900: $response = 'RFB 003.008'; break;
 case 8009: $response = "\x41\x42\x00\x01\x09"; break;
}

/** terminbate response */
$response .= "\r\n";

/** worker-loop */
while(true)
{
 /** reset */
 $msgsock = false;
 /** wait for client connection */
 while($msgsock === false)
 {
  usleep(100000);
  $msgsock = @socket_accept($sock);
 }
 /** send response to the client */
 @socket_write($msgsock, $response);
 /** log connection */
 if(@socket_getpeername($msgsock, $remote_ip) !== false)
 {
  $output = strftime("%Y-%m-%d %H:%M:%S") . "\t" . $remote_ip . "\t" .
gethostbyaddr($remote_ip) . "\n";
  if(file_put_contents ('/var/log/honeypot.log', $output, FILE_APPEND |
LOCK_EX) === false)
  {
   exit('failed write to /var/log/honeypot.log');
  }
  /** close client connection */
  @socket_close($msgsock);
 }
}

/**
 * signal handler
 *
 * @param  int $signo
 * @return void
 * @access public
*/
function hp_sig_handler(int $signo)
{
 global $sock;
 switch($signo)
 {
  case SIGUSR1: @socket_close($sock); break;
 }
}

Expected result:
----------------
socket server -> log into text file when connection to the socket 
(systemd-unit)

Actual result:
--------------
[root@srv-schnapsverein:/data/fileserver/software/dksoftware]$php
honeypot1.php 
#PHP Fatal error:  Uncaught Error: Call to undefined function
posix_initgroups() in
/data/fileserver/software/dksoftware/honeypot1.php:54
Stack trace:
#0 {main}
  thrown in /data/fileserver/software/dksoftware/honeypot1.php on line
54

-- 
Edit bug report at https://bugs.php.net/bug.php?id=80616&edit=1
-- 
Fix committed:                    https://bugs.php.net/fix.php?id=80616&r=fixed
Fixed in release:                 https://bugs.php.net/fix.php?id=80616&r=alreadyfixed
Need backtrace:                   https://bugs.php.net/fix.php?id=80616&r=needtrace
Need Reproduce Script:            https://bugs.php.net/fix.php?id=80616&r=needscript
Try newer version:                https://bugs.php.net/fix.php?id=80616&r=oldversion
Not developer issue:              https://bugs.php.net/fix.php?id=80616&r=support
Expected behavior:                https://bugs.php.net/fix.php?id=80616&r=notwrong
Not enough info:                  https://bugs.php.net/fix.php?id=80616&r=notenoughinfo
Submitted twice:                  https://bugs.php.net/fix.php?id=80616&r=submittedtwice
register_globals:                 https://bugs.php.net/fix.php?id=80616&r=globals
PHP version support discontinued: https://bugs.php.net/fix.php?id=80616&r=phptooold
Daylight Savings:                 https://bugs.php.net/fix.php?id=80616&r=dst
IIS Stability:                    https://bugs.php.net/fix.php?id=80616&r=isapi
Install GNU Sed:                  https://bugs.php.net/fix.php?id=80616&r=gnused
Floating point limitations:       https://bugs.php.net/fix.php?id=80616&r=float
No Zend Extensions:               https://bugs.php.net/fix.php?id=80616&r=nozend
MySQL Configuration Error:        https://bugs.php.net/fix.php?id=80616&r=mysqlcfg


Thread (5 messages)

« previous php.bugs (#231494) next »