Skip to content

Commit 8cde8a2

Browse files
committed
Improved IIS support & setup system checks
1 parent 3cd38c4 commit 8cde8a2

File tree

10 files changed

+67
-47
lines changed

10 files changed

+67
-47
lines changed

CHANGELOG.md

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
DAMN VULNERABLE WEB APPLICATION
22
=======================
33

4+
v1.10 (*Not Yet Released)
5+
======
6+
7+
+ Improved IIS support. (@g0tmi1k)
8+
+ Improved setup system check. (@g0tmi1k)
9+
410
v1.9 (2015-10-05)
511
======
612

@@ -32,7 +38,7 @@ v1.9 (2015-10-05)
3238
+ Renamed 'Command Execution' to 'Command Injection'. (@g0tmi1k)
3339
+ Renamed 'high' level to 'impossible' and created new vectors for 'high'. (@g0tmi1k)
3440
+ Updated README and documentation. (@g0tmi1k)
35-
+ Various code cleanups in the core PHP files+CSS. (@g0tmi1k)
41+
+ Various code cleanups in the core PHP files + CSS. (@g0tmi1k)
3642
+ Various setup improvements (e.g. redirection + limited menu links). (@g0tmi1k)
3743

3844
v1.8 (2013-05-01)

README.md

+3-4
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ along with Damn Vulnerable Web Application (DVWA). If not, see http://www.gnu.o
4242

4343
DVWA is available either as a package that will run on your own web server or as a Live CD:
4444

45-
+ DVWA Development Source (Latest) [Download ZIP](https://github.com/RandomStorm/DVWA/archive/master.zip) // `git clone https://github.com/RandomStorm/DVWA`
4645
+ DVWA v1.9 Source (Stable) - \[1.3 MB\] [Download ZIP](https://github.com/RandomStorm/DVWA/archive/v1.9.zip) - Released 2015-10-05
4746
+ DVWA v1.0.7 LiveCD - \[480 MB\] [Download ISO](http://www.dvwa.co.uk/DVWA-1.0.7.iso) - Released 2010-09-08
47+
+ DVWA Development Source (Latest) [Download ZIP](https://github.com/RandomStorm/DVWA/archive/master.zip) // `git clone https://github.com/RandomStorm/DVWA`
4848

4949
- - -
5050

@@ -68,8 +68,7 @@ Simply unzip dvwa.zip, place the unzipped files in your public html folder, then
6868

6969
If you are using a Debian based Linux distribution, you will need to install the following packages _(or their equivalent)_:
7070

71-
`apt-get -y install apache2 mysql-server php5 php5-mysql php-pear php5-gd`
72-
71+
`apt-get -y install apache2 mysql-server php5 php5-mysql php5-gd`
7372

7473
### Database Setup
7574

@@ -160,7 +159,7 @@ With:
160159

161160
## Links
162161

163-
Homepage: http://www.dvwa.co.uk
162+
Homepage: http://www.dvwa.co.uk/
164163

165164
Project Home: https://github.com/RandomStorm/DVWA
166165

about.php

+8-7
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
$page[ 'body' ] .= "
1313
<div class=\"body_padded\">
14-
<h1>About</h1>
14+
<h2>About</h2>
1515
<p>Version " . dvwaVersionGet() . " (Release date: " . dvwaReleaseDateGet() . ")</p>
1616
<p>Damn Vulnerable Web Application (DVWA) is a PHP/MySQL web application that is damn vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, help web developers better understand the processes of securing web applications and aid teachers/students to teach/learn web application security in a class room environment</p>
1717
<p>The official documentation for DVWA can be found <a href=\"docs/DVWA_v1.3.pdf\">here</a>.</p>
@@ -28,16 +28,16 @@
2828
2929
<h2>Credits</h2>
3030
<ul>
31+
<li>Brooks Garrett: " . dvwaExternalLinkUrlGet( 'http://brooksgarrett.com/','www.brooksgarrett.com' ) . "</li>
3132
<li>Craig</li>
33+
<li>g0tmi1k: " . dvwaExternalLinkUrlGet( 'https://blog.g0tmi1k.com/','g0tmi1k.com' ) . "</li>
3234
<li>Jamesr: " . dvwaExternalLinkUrlGet( 'https://www.creativenucleus.com/','www.creativenucleus.com' ) . " / " . dvwaExternalLinkUrlGet( 'http://www.designnewcastle.co.uk/','www.designnewcastle.co.uk' ) . "</li>
33-
<li>Ryan Dewhurst: " . dvwaExternalLinkUrlGet( 'https://www.dewhurstsecurity.com/','www.dewhurstsecurity.com' ) . "</li>
34-
<li>Tedi Heriyanto: " . dvwaExternalLinkUrlGet( 'http://tedi.heriyanto.net/','http://tedi.heriyanto.net' ) . "</li>
35-
<li>Tom Mackenzie: " . dvwaExternalLinkUrlGet( 'https://www.tmacuk.co.uk/','www.tmacuk.co.uk' ) . "</li>
36-
<li>RandomStorm: " . dvwaExternalLinkUrlGet( 'https://www.randomstorm.com/','www.randomstorm.com' ) . "</li>
3735
<li>Jason Jones: " . dvwaExternalLinkUrlGet( 'http://www.linux-ninja.com/','www.linux-ninja.com' ) . "</li>
38-
<li>Brooks Garrett: " . dvwaExternalLinkUrlGet( 'http://brooksgarrett.com/','www.brooksgarrett.com' ) . "</li>
39-
<li>g0tmi1k: " . dvwaExternalLinkUrlGet( 'https://blog.g0tmi1k.com/','g0tmi1k.com' ) . "</li>
36+
<li>RandomStorm: " . dvwaExternalLinkUrlGet( 'https://www.randomstorm.com/','www.randomstorm.com' ) . "</li>
37+
<li>Ryan Dewhurst: " . dvwaExternalLinkUrlGet( 'https://www.dewhurstsecurity.com/','www.dewhurstsecurity.com' ) . "</li>
4038
<li>Shinkurt: " . dvwaExternalLinkUrlGet( 'http://www.paulosyibelo.com/','www.paulosyibelo.com' ) . "</li>
39+
<li>Tedi Heriyanto: " . dvwaExternalLinkUrlGet( 'http://tedi.heriyanto.net/','tedi.heriyanto.net' ) . "</li>
40+
<li>Tom Mackenzie: " . dvwaExternalLinkUrlGet( 'https://www.tmacuk.co.uk/','www.tmacuk.co.uk' ) . "</li>
4141
</ul>
4242
<ul>
4343
<li>PHPIDS - Copyright (c) 2007 " . dvwaExternalLinkUrlGet( 'https://github.com/PHPIDS/PHPIDS', 'PHPIDS group' ) . "</li>
@@ -55,6 +55,7 @@
5555
</div>\n";
5656

5757
dvwaHtmlEcho( $page );
58+
5859
exit;
5960

6061
?>

dvwa/includes/DBMS/MySQL.php

+9-9
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,21 @@
77
*/
88

99
if( !@mysql_connect( $_DVWA[ 'db_server' ], $_DVWA[ 'db_user' ], $_DVWA[ 'db_password' ] ) ) {
10-
dvwaMessagePush( "Could not connect to the database.<br/>Please check the config file." );
10+
dvwaMessagePush( "Could not connect to the MySQL service.<br />Please check the config file." );
1111
dvwaPageReload();
1212
}
1313

1414

1515
// Create database
1616
$drop_db = "DROP DATABASE IF EXISTS {$_DVWA[ 'db_database' ]};";
1717
if( !@mysql_query( $drop_db ) ) {
18-
dvwaMessagePush( "Could not drop existing database<br />SQL: ".mysql_error() );
18+
dvwaMessagePush( "Could not drop existing database<br />SQL: " . mysql_error() );
1919
dvwaPageReload();
2020
}
2121

2222
$create_db = "CREATE DATABASE {$_DVWA[ 'db_database' ]};";
2323
if( !@mysql_query( $create_db ) ) {
24-
dvwaMessagePush( "Could not create database<br />SQL: ".mysql_error() );
24+
dvwaMessagePush( "Could not create database<br />SQL: " . mysql_error() );
2525
dvwaPageReload();
2626
}
2727
dvwaMessagePush( "Database has been created." );
@@ -35,17 +35,17 @@
3535

3636
$create_tb = "CREATE TABLE users (user_id int(6),first_name varchar(15),last_name varchar(15), user varchar(15), password varchar(32),avatar varchar(70), last_login TIMESTAMP, failed_login INT(3), PRIMARY KEY (user_id));";
3737
if( !mysql_query( $create_tb ) ) {
38-
dvwaMessagePush( "Table could not be created<br />SQL: ".mysql_error() );
38+
dvwaMessagePush( "Table could not be created<br />SQL: " . mysql_error() );
3939
dvwaPageReload();
4040
}
4141
dvwaMessagePush( "'users' table was created." );
4242

4343

4444
// Insert some data into users
4545
// Get the base directory for the avatar media...
46-
$baseUrl = 'http://'.$_SERVER[ 'SERVER_NAME' ].$_SERVER[ 'PHP_SELF' ];
46+
$baseUrl = 'http://' . $_SERVER[ 'SERVER_NAME' ] . $_SERVER[ 'PHP_SELF' ];
4747
$stripPos = strpos( $baseUrl, 'setup.php' );
48-
$baseUrl = substr( $baseUrl, 0, $stripPos ).'hackable/users/';
48+
$baseUrl = substr( $baseUrl, 0, $stripPos ) . 'hackable/users/';
4949

5050
$insert = "INSERT INTO users VALUES
5151
('1','admin','admin','admin',MD5('password'),'{$baseUrl}admin.jpg', NOW(), '0'),
@@ -54,7 +54,7 @@
5454
('4','Pablo','Picasso','pablo',MD5('letmein'),'{$baseUrl}pablo.jpg', NOW(), '0'),
5555
('5','Bob','Smith','smithy',MD5('password'),'{$baseUrl}smithy.jpg', NOW(), '0');";
5656
if( !mysql_query( $insert ) ) {
57-
dvwaMessagePush( "Data could not be inserted into 'users' table<br />SQL: ".mysql_error() );
57+
dvwaMessagePush( "Data could not be inserted into 'users' table<br />SQL: " . mysql_error() );
5858
dvwaPageReload();
5959
}
6060
dvwaMessagePush( "Data inserted into 'users' table." );
@@ -63,7 +63,7 @@
6363
// Create guestbook table
6464
$create_tb_guestbook = "CREATE TABLE guestbook (comment_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, comment varchar(300), name varchar(100), PRIMARY KEY (comment_id));";
6565
if( !mysql_query( $create_tb_guestbook ) ) {
66-
dvwaMessagePush( "Table could not be created<br />SQL: ".mysql_error() );
66+
dvwaMessagePush( "Table could not be created<br />SQL: " . mysql_error() );
6767
dvwaPageReload();
6868
}
6969
dvwaMessagePush( "'guestbook' table was created." );
@@ -72,7 +72,7 @@
7272
// Insert data into 'guestbook'
7373
$insert = "INSERT INTO guestbook VALUES ('1','This is a test comment.','test');";
7474
if( !mysql_query( $insert ) ) {
75-
dvwaMessagePush( "Data could not be inserted into 'guestbook' table<br />SQL: ".mysql_error() );
75+
dvwaMessagePush( "Data could not be inserted into 'guestbook' table<br />SQL: " . mysql_error() );
7676
dvwaPageReload();
7777
}
7878
dvwaMessagePush( "Data inserted into 'guestbook' table." );

dvwa/includes/dvwaPage.inc.php

+23-16
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22

33
if( !defined( 'DVWA_WEB_PAGE_TO_ROOT' ) ) {
4-
define( 'DVWA System error- WEB_PAGE_TO_ROOT undefined' );
4+
die( 'DVWA System error- WEB_PAGE_TO_ROOT undefined' );
55
exit;
66
}
77

@@ -35,12 +35,12 @@
3535

3636
// DVWA version
3737
function dvwaVersionGet() {
38-
return '1.9';
38+
return '1.10 *Development*';
3939
}
4040

4141
// DVWA release date
4242
function dvwaReleaseDateGet() {
43-
return '2015-09-19';
43+
return '2015-10-08';
4444
}
4545

4646

@@ -540,23 +540,30 @@ function tokenField() { # Return a field for the (CSRF) token
540540

541541

542542
// Setup Functions --
543-
$PHPUploadPath = realpath( getcwd() ) . "/hackable/uploads/";
544-
$PHPIDSPath = realpath( getcwd() ) . "/external/phpids/" . dvwaPhpIdsVersionGet() . "/lib/IDS/tmp/phpids_log.txt";
545-
546-
$phpDisplayErrors = 'PHP function display_errors: <em>' . ( ini_get( 'display_errors' ) ? 'Enabled</em> <i>(Easy Mode!)</i>' : 'Disabled</em>' ); // Verbose error messages (e.g. full path disclosure)
547-
$phpSafeMode = 'PHP function safe_mode: <span class="' . ( ini_get( 'safe_mode' ) ? 'failure">Enabled' : 'success">Disabled' ) . '</span>'; // DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0
548-
$phpMagicQuotes = 'PHP function magic_quotes_gpc: <span class="' . ( ini_get( 'magic_quotes_gpc' ) ? 'failure">Enabled' : 'success">Disabled' ) . '</span>'; // DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0
549-
$phpURLInclude = 'PHP function allow_url_include: <span class="' . ( ini_get( 'allow_url_include' ) ? 'success">Enabled' : 'failure">Disabled' ) . '</span>'; // RFI
550-
$phpURLFopen = 'PHP function allow_url_fopen: <span class="' . ( ini_get( 'allow_url_fopen' ) ? 'success">Enabled' : 'failure">Disabled' ) . '</span>'; // RFI
551-
$phpGD = 'PHP module php-gd: <span class="' . ( ( extension_loaded( 'gd' ) && function_exists( 'gd_info' ) ) ? 'success">Installed' : 'failure">Missing' ) . '</span>'; // File Upload
543+
$PHPUploadPath = realpath( getcwd() . DIRECTORY_SEPARATOR . DVWA_WEB_PAGE_TO_ROOT . "hackable" . DIRECTORY_SEPARATOR . "uploads" ) . DIRECTORY_SEPARATOR;
544+
$PHPIDSPath = realpath( getcwd() . DIRECTORY_SEPARATOR . DVWA_WEB_PAGE_TO_ROOT . "external" . DIRECTORY_SEPARATOR . "phpids" . DIRECTORY_SEPARATOR . dvwaPhpIdsVersionGet() . DIRECTORY_SEPARATOR . "lib" . DIRECTORY_SEPARATOR . "IDS" . DIRECTORY_SEPARATOR . "tmp" . DIRECTORY_SEPARATOR . "phpids_log.txt" );
545+
546+
$phpDisplayErrors = 'PHP function display_errors: <em>' . ( ini_get( 'display_errors' ) ? 'Enabled</em> <i>(Easy Mode!)</i>' : 'Disabled</em>' ); // Verbose error messages (e.g. full path disclosure)
547+
$phpSafeMode = 'PHP function safe_mode: <span class="' . ( ini_get( 'safe_mode' ) ? 'failure">Enabled' : 'success">Disabled' ) . '</span>'; // DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0
548+
$phpMagicQuotes = 'PHP function magic_quotes_gpc: <span class="' . ( ini_get( 'magic_quotes_gpc' ) ? 'failure">Enabled' : 'success">Disabled' ) . '</span>'; // DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0
549+
$phpURLInclude = 'PHP function allow_url_include: <span class="' . ( ini_get( 'allow_url_include' ) ? 'success">Enabled' : 'failure">Disabled' ) . '</span>'; // RFI
550+
$phpURLFopen = 'PHP function allow_url_fopen: <span class="' . ( ini_get( 'allow_url_fopen' ) ? 'success">Enabled' : 'failure">Disabled' ) . '</span>'; // RFI
551+
$phpGD = 'PHP module gd: <span class="' . ( ( extension_loaded( 'gd' ) && function_exists( 'gd_info' ) ) ? 'success">Installed' : 'failure">Missing' ) . '</span>'; // File Upload
552+
$phpMySQL = 'PHP module mysql: <span class="' . ( ( extension_loaded( 'mysql' ) && function_exists( 'mysql' ) ) ? 'success">Installed' : 'failure">Missing' ) . '</span>'; // Core DVWA
553+
$phpPDO = 'PHP module pdo_mysql: <span class="' . ( extension_loaded( 'pdo_mysql' ) ? 'success">Installed' : 'failure">Missing' ) . '</span>'; // SQLi
552554

553555
$DVWARecaptcha = 'reCAPTCHA key: <span class="' . ( ( isset( $_DVWA[ 'recaptcha_public_key' ] ) && $_DVWA[ 'recaptcha_public_key' ] != '' ) ? 'success">' . $_DVWA[ 'recaptcha_public_key' ] : 'failure">Missing' ) . '</span>';
554556

555-
$DVWAUploadsWrite = 'Writable folder ' . $PHPUploadPath . ': <span class="' . ( is_writable( $PHPUploadPath ) ? 'success">Yes)' : 'failure">No' ) . '</span>'; // File Upload
556-
$DVWAPHPWrite = 'Writable file ' . $PHPIDSPath . ': <span class="' . ( is_writable( $PHPIDSPath ) ? 'success">Yes' : 'failure">No' ) . '</span>'; // PHPIDS
557+
$DVWAUploadsWrite = '[User: ' . get_current_user() . '] Writable folder ' . $PHPUploadPath . ': <span class="' . ( is_writable( $PHPUploadPath ) ? 'success">Yes' : 'failure">No' ) . '</span>'; // File Upload
558+
$DVWAPHPWrite = '[User: ' . get_current_user() . '] Writable file ' . $PHPIDSPath . ': <span class="' . ( is_writable( $PHPIDSPath ) ? 'success">Yes' : 'failure">No' ) . '</span>'; // PHPIDS
559+
560+
$DVWAOS = 'Operating system: <em>' . ( strtoupper( substr (PHP_OS, 0, 3)) === 'WIN' ? 'Windows' : '*nix' ) . '</em>';
561+
$SERVER_NAME = 'Web Server SERVER_NAME: <em>' . $_SERVER[ 'SERVER_NAME' ] . '</em>'; // CSRF
557562

558-
$DVWAOS = 'Operating system: <em>' . ( strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' ? 'Windows' : '*nix' ) . '</em>';
559-
$SERVER_NAME = 'Web Server SERVER_NAME: <em>' . $_SERVER[ 'SERVER_NAME' ] . '</em>'; // CSRF
563+
$MYSQL_USER = 'MySQL username: <em>' . $_DVWA[ 'db_user' ] . '</em>';
564+
$MYSQL_PASS = 'MySQL password: <em>' . ( ($_DVWA[ 'db_password' ] != "" ) ? '******' : '*blank*' ) . '</em>';
565+
$MYSQL_DB = 'MySQL database: <em>' . $_DVWA[ 'db_database' ] . '</em>';
566+
$MYSQL_SERVER = 'MySQL host: <em>' . $_DVWA[ 'db_server' ] . '</em>';
560567
// -- END (Setup Functions)
561568

562569
?>

hackable/flags/fi.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212

1313
echo "2.) My name is Sherlock Holmes. It is my business to know what other people don't know.\n\n<br /><br />\n";
1414

15-
$line3 = "3.) Romeo, Romeo! wherefore art thou Romeo?";
16-
$line3 = "--LINE MISSING--";
15+
$line3 = "3.) Romeo, Romeo! Wherefore art thou Romeo?";
16+
$line3 = "--LINE HIDDEN ;)--";
1717
echo $line3 . "\n\n<br /><br />\n";
1818

1919
$line4 = "NC4pI" . "FRoZSBwb29s" . "IG9uIH" . "RoZSByb29mIG1" . "1c3QgaGF" . "2ZSBh" . "IGxlY" . "Wsu";

setup.php

+9-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@
3434
<div class=\"body_padded\">
3535
<h1>Database Setup <img src=\"" . DVWA_WEB_PAGE_TO_ROOT . "dvwa/images/spanner.png\" /></h1>
3636
37-
<p>Click on the 'Create / Reset Database' button below to create or reset your database.</br>
38-
If you get an error make sure you have the correct user credentials in: <em>" . realpath( getcwd() ) . "/config/config.inc.php</em></p>
37+
<p>Click on the 'Create / Reset Database' button below to create or reset your database.<br />
38+
If you get an error make sure you have the correct user credentials in: <em>" . realpath( getcwd() . DIRECTORY_SEPARATOR . "config" . DIRECTORY_SEPARATOR . "config.inc.php" ) . "</em></p>
3939
4040
<p>If the database already exists, <em>it will be cleared and the data will be reset</em>.<br />
4141
You can also use this to reset the administrator credentials (\"<em>admin</em> // <em>password</em>\") at any stage.</p>
@@ -56,6 +56,13 @@
5656
{$phpURLFopen}<br />
5757
{$phpMagicQuotes}<br />
5858
{$phpGD}<br />
59+
{$phpMySQL}<br />
60+
{$phpPDO}<br />
61+
<br />
62+
{$MYSQL_USER}<br />
63+
{$MYSQL_PASS}<br />
64+
{$MYSQL_DB}<br />
65+
{$MYSQL_SERVER}<br />
5966
<br />
6067
{$DVWARecaptcha}<br />
6168
<br />

vulnerabilities/captcha/index.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
// Check if we have a reCAPTCHA key
3737
$WarningHtml = '';
3838
if( $_DVWA[ 'recaptcha_public_key' ] == "" ) {
39-
$WarningHtml = "<div class=\"warning\"><em>reCAPTCHA API key missing</em> from config file: " . realpath( dirname( dirname( getcwd() ) ) . "/config/config.inc.php" ) . "</div>";
40-
$html = "<em>Please register for a key</em> from reCAPTCHA: " . dvwaExternalLinkUrlGet('https://www.google.com/recaptcha/admin/create');
39+
$WarningHtml = "<div class=\"warning\"><em>reCAPTCHA API key missing</em> from config file: " . realpath( getcwd() . DIRECTORY_SEPARATOR . DVWA_WEB_PAGE_TO_ROOT . "config" . DIRECTORY_SEPARATOR . "config.inc.php" ) . "</div>";
40+
$html = "<em>Please register for a key</em> from reCAPTCHA: " . dvwaExternalLinkUrlGet( 'https://www.google.com/recaptcha/admin/create' );
4141
$hide_form = true;
4242
}
4343

vulnerabilities/fi/help/help.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<br /><hr /><br />
2121

2222
<h3>Objective</h3>
23-
<p>Read all five famous quotes from '<a href="../hackable/flags/fi.php">../hackable/flags/fi.php</a>' using only the file inclusion.</p>
23+
<p>Read all <u>five</u> famous quotes from '<a href="../hackable/flags/fi.php">../hackable/flags/fi.php</a>' using only the file inclusion.</p>
2424

2525
<br /><hr /><br />
2626

vulnerabilities/upload/index.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@
3333

3434
// Check if folder is writeable
3535
$WarningHtml = '';
36-
if( is_writable( realpath( dirname( dirname( getcwd() ) ) ) . "/hackable/uploads/" ) == false ) {
37-
$WarningHtml .= "<div class=\"warning\">Incorrect folder permissions: " . realpath( dirname( dirname( getcwd() ) ) ) . "/hackable/uploads/" . "<br /><em>Folder is not writable.</em></div>";
36+
if( !is_writable( $PHPUploadPath ) ) {
37+
$WarningHtml .= "<div class=\"warning\">Incorrect folder permissions: {$PHPUploadPath}<br /><em>Folder is not writable.</em></div>";
3838
}
3939
// Is PHP-GD installed?
4040
if( ( !extension_loaded( 'gd' ) || !function_exists( 'gd_info' ) ) ) {
41-
$WarningHtml .= "<div class=\"warning\">The PHP module <em>PHP-GD is not installed</em>.</div>";
41+
$WarningHtml .= "<div class=\"warning\">The PHP module <em>GD is not installed</em>.</div>";
4242
}
4343

4444
$page[ 'body' ] .= "

0 commit comments

Comments
 (0)