Bug #80616 [NEW]: #PHP Fatal error: Uncaught Error: Call to undefined function posix_initgroups(
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)
- kucherdominikus at yahoo dot de