# Author: Scott Sutherland, NetSPI (@_nullbind / nullbind)

function Get-PhpIniCredentials {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]$FilePath
    )

    # Initialize a hashtable to store extracted values
    $configData = @{
        Username = $null
        Password = $null
    }

    # Check if the file exists
    if (-Not (Test-Path -Path $FilePath)) {
        Write-Error "File not found: $FilePath"
        return
    }

    # Read the configuration file
    $configFile = Get-Content -Path $FilePath

    # Parse the configuration file line by line
    foreach ($line in $configFile) {
        # Ignore comment lines and empty lines
        if ($line -match '^\s*;' -or $line -match '^\s*$') {
            continue
        }

        # Extract the username (e.g., mysql.default_user)
        if ($line -match '^\s*mysql\.default_user\s*=\s*"(.+)"') {
            $configData.Username = $matches[1].Trim()
        }

        # Extract the password (e.g., mysql.default_password)
        if ($line -match '^\s*mysql\.default_password\s*=\s*"(.+)"') {
            $configData.Password = $matches[1].Trim()
        }
    }

    # Output the extracted configuration as a PowerShell object
    [PSCustomObject]@{
        Username = $configData.Username
        Password = $configData.Password
    }
}

# Example usage:
$credentials = Get-PhpIniCredentials -FilePath "c:\temp\configs\php.ini"
$credentials | Format-List


<# php.ini - storing mysql credentials


[PHP]
; Basic PHP settings

; Maximum size of POST data allowed
post_max_size = 8M

; Maximum allowed size for uploaded files
upload_max_filesize = 2M

; INSECURE: Storing database credentials in php.ini (not recommended)
; This exposes credentials to anyone with access to php.ini or via phpinfo() if not secured.

mysql.default_user = "dbuser"
mysql.default_password = "P@ssw0rd123"
mysql.default_host = "localhost"
mysql.default_database = "example_db"

; Log errors to a file
log_errors = On
error_log = /var/log/php_errors.log

; Ensure that this option is Off to avoid disclosing sensitive configuration details
expose_php = Off

; Ensure that phpinfo() is secured or disabled to prevent exposure of configuration data
disable_functions = phpinfo


#>