kostenloser Webspace werbefrei: lima-city


Einträge aus Datenbank verschwinden

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo Zusammen,

    Ich bemerke gerade, das 2 Einträge aus meiner MySQL Datenbank verschwunden sind.

    Kann es sein das mein Script eine Möglichkeit für SQL Injection anbietet?

    <?php
    		require_once("connect/config.php");
    		// Verbindungsvariable samt Zugangsdaten festlegen
    		@$db = mysqli_connect($url, $user, $pw, $dbname);
    		
    		
    		// Variabeln für Funktionen
    
    		$time = time();
    		$Download_name = mysqli_real_escape_string($db, $_GET["downloadname"]);
    		$action      = mysqli_real_escape_string($db, $_GET["action"]); 
    		$instrument      = mysqli_real_escape_string($db, $_GET["instrument"]); 
    		$app      = mysqli_real_escape_string($db, $_GET["app"]); 
    		
    		
    		$query_get = $db->query("SELECT * FROM downloads WHERE titel = '$Download_name'");
    		$query_get_object = $query_get->fetch_object();
    	
    		
    		if(empty($instrument)){
    		
    		$instrument = $query_get_object->instrument;
    		}
    		else{
    		$instrument = $instrument;
    		}
    		if(empty($app)){
    		
    		$app = $query_get_object->kategorie;
    		}
    		else{
    		
    		$app = $app;
    		}
    		
    		// Zufalls Key Generator
    		
    		function zufallsstring($laenge){
    			
    				$zeichen = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    				$zufalls_string = '';
    				$anzahl_zeichen = strlen($zeichen);
    			
    				for($i=0;$i<$laenge;$i++){
    				$zufalls_string .= $zeichen[mt_rand(0, $anzahl_zeichen - 1)];
    				}
    			return $zufalls_string;
    		} 
    		
    		$download_key = zufallsstring(10);
    ?>
    
    <section>
    <h3>Kategorien</h3>
    <ul class="links">
    	<?php
    		$abfrage_kategorien  = $db->query("SELECT * FROM download_kategorien");
    		while($ausgabe_kategorien =$abfrage_kategorien->fetch_object())
    	{
    	
    	// Ausgabe der 3 neusten Downloads
    	echo "<li><a href=\"/downloads/$ausgabe_kategorien->titel\">$ausgabe_kategorien->titel</a></li>";
    	  
    	}  
    	?>	
    	
    </ul>
    </section>	
    
    <section>
    <h3>Neueste Downloads</h3>
    <ul class="links">
    	<?php
    		$abfrage_neue_downloads  = $db->query("SELECT * FROM downloads WHERE visible=1 ORDER BY id DESC LIMIT 3");
    	while($rowneu =$abfrage_neue_downloads->fetch_object())
    	{
    	
    	// Ausgabe der 3 neusten Downloads
    	echo "<li><a href=\"/downloads/$rowneu->kategorie/$rowneu->titel\">$rowneu->titel</a></li>";
    	  
    	}  
    	?>	
    	
    </ul>
    </section>
    
    
    <section>
    <h3>App Downloads</h3>
    <ul class="links">
    	<li><a href="http://bit.ly/magicpianoios" alt="Magic Piano" target="_blank">Magic Piano</a></li>
    	<li><a href="https://itunes.apple.com/app/sing!-karaoke-by-smule/id509993510" alt="Sing! Karaoke" target="_blank">Sing! Karaoke</a></li>
    	<li><a href="https://itunes.apple.com/us/app/piano-joy/id547046870" alt="Piano Joy" target="_blank">Piano Joy</a></li>
    	<li><a href="https://itunes.apple.com/us/app/guitar!-by-smule/id632353530" alt="Guitar!" target="_blank">Guitar!</a></li>
    </ul>	
    
    </section>
    
    <section class="last">  
    	<h3>Software</h3>
    	<ul class="links">
    		<li><a href="http://marvinkleinmusic.bplaced.net/Dezimalrechner" target="_blank">Dezimalrechner</a></li>
    		
    	</ul>	
    </section>
    </div>
    </div>
    
    
    <div class="8u  12u(2) important(2)">
    <div id="content">
    <!-- Content -->	
    <?php
    /// Überprüfung ob id & action vorhanden ist
    if (!isset ($_GET["downloadname"]) or !isset ($_GET["action"]) or empty($_GET["downloadname"]) or empty($_GET["action"])){
    	echo "<meta http-equiv='refresh' content='0; URL=http://marvinkleinmusic.de/downloads.php'>";
    	exit();
    }
    
    /// Download Instrument Informationen Erhalten
    	$get_instrument_info_change = $db->query("SELECT * FROM downloads WHERE titel = '$Download_name'"); 
    	$get_instrument_info_change_row   = $get_instrument_info_change->fetch_object();
    /// Instrument wechseln
    if (isset($_POST["instrument"]) AND $action == "view"){
    
    	$instrument =mysqli_real_escape_string($db, $_POST["instrument"]);
    	$query = $db->query("SELECT * FROM downloads WHERE titel = '$get_instrument_info_change_row->titel' AND instrument = '$instrument' LIMIT 1");  
    	$instrument_query = $query->fetch_object();
    
    	echo "<script> top.location.href'/Get_File.php?downloadname=$instrument_query->titel&action=view&instrument=$instrument_query->instrument'</script>";
    }
    
    
    /// Ausgabe der Informationen zum Download
    if($action == "view"){
    
    	?>  
    	<div class="breadcrumb">
    		<a href="/downloads.php">Kategorien</a> / <a href="/downloads/<?php echo $app; ?>"><?php echo $app; ?></a> / <a href="/downloads/<?php echo $app . "/" . $Download_name; ?>"><?php echo $Download_name; ?></a>
    	</div>
    	<?php
    	
    	
    	/// Download Informationen Erhalten
    	$get_download_info = $db->query("SELECT * FROM downloads WHERE titel = '$Download_name' AND instrument = '$instrument' AND kategorie = '$app'"); 
    	$get_download_info_num = $get_download_info->num_rows;
    	
    	if($get_download_info_num > 0){
    	$get_download_info_row   = $get_download_info->fetch_object();
    	$url = $_SERVER['PHP_SELF']  . "?" . $_SERVER['QUERY_STRING'];
    	$datum = $get_download_info_row->datum;
    	
    	$get_instruments  = $db->query("SELECT * FROM downloads WHERE titel = '$get_download_info_row->titel' AND kategorie = '$app'");
    	$count_instruments = $get_instruments->num_rows;
    			
    	if($count_instruments > 1){
    		echo"<div style=\"margin-top:-15px;\" onload=\"setchecked('instrument','$row->instrument')\">";
    		/// Instrumenten Ausgabe
    			echo "<span style=\"font-size: 16pt; color:#000;\">Instrument:    
    			
    			<form method='post' action='$url'>
    			<select name=\"instrument\" id=\"instrument\" onchange=this.form.submit()>
    				<option value='$instrument'>$instrument</option>
    			";
    			/// Restlichen Instrumente
    			While($get_instruments_row = $get_instruments->fetch_object()){
    				if($get_instruments_row->instrument == $instrument){
    				echo"";
    				}
    				else{
    					echo "<option value='$get_instruments_row->instrument'>$get_instruments_row->instrument </option>";
    				}	
    			}
    
    			echo "</select></form></span>";
    			
    			}
    		
    			
    		/// iFrame & Beschreibung
    			if(!empty($get_download_info_row->vorschau)){
    
    			echo"<iframe style=\"margin-top:10px;\" width='100%' height='400' src='$get_download_info_row->vorschau' frameborder='0' allowfullscreen></iframe>";
    			}else{
    
    			echo "
    			<img alt='no_video' src='images/no_video.png'>
    			";
    			}
    
    
    			if(!empty($get_download_info_row->beschreibung)){
    			echo"
    		
    			<div class='beschreibung'>
    			$get_download_info_row->beschreibung
    			</div>";
    
    			}else{
    
    			echo "
    			<div class='beschreibung'>
    			Keine Beschreibung vorhanden..
    			</div>";
    			}
    			
    			///Eintragen Der Download URL
    		
    			$downloadurl = $row->downloadurl;
    			$db->query("INSERT INTO download_links(download_key,downloadurl,time) VALUES ('$download_key','$get_download_info_row->downloadurl','$time')");
    		/// Bereich für HTML schließen
    	?>
    		<div style="margin-top:10px; margin-bottom:5px;" class="datagrid">
    			<table>
    				<thead>
    					<tr>
    						<th colspan="2">über Download:</th>
    					</tr>
    				</thead>
    			
    				<tbody>
    					<tr>
    						<td>Name:</td>
    						<td><?php echo $get_download_info_row->titel; ?></td>
    					</tr>
    			
    					<tr class="alt">
    						<td>Instrument:</td>
    						<td><?php echo $get_download_info_row->instrument; ?></td>
    					</tr>
    			
    					<tr>
    						<td>Veröffentlichung:</td>
    						<td><?php echo $datum; ?></td>
    					</tr>
    				
    					<tr class="alt">
    						<td>Download Aufrufe:</td>
    						<td><?php echo $get_download_info_row->aufrufe; ?></td>
    					</tr>
    			
    					<tr>
    						<td>Bewerten:</td>
    						<td><iframe src="/vote?name=<?php echo $get_download_info_row->id ?>" width="90%" height="55" scrolling="no" frameborder="0" allowtransparency="true"></iframe></td>	
    					</tr>
    				</tbody>
    			</table>
    	</div>
    
    <a class="download_button" href="/downloads/<?php echo $app . "/" . $Download_name . "/" . $download_key . "/download"; ?>" target="_self"><img alt="" src="/images/Download_Button.png" /></a>
    <?php
    		/// Bereich geöffnet
    	
    	
    		echo"</div>";
    		  
    	}
    	else{
    		echo"<div class=\"active_err\">Download wurde nicht gefunden!</div>"; 
    	}	
    	/// Ende der Überprüfung ob Download Existiert
    	}		
    	/// Ende der Ausgabe & Start der Direkt Downloads
    	elseif($action == "download"){
    		/// Download Informationen Erhalten
    		$get_download_info_download = $db->query("SELECT * FROM downloads WHERE titel = '$Download_name'"); 
    		$get_download_info_row_download   = $get_download_info_download->fetch_object();
    		 
    		
    		
    		/// Überprüfung ob ein Key Vorhanden ist
    		$download_key = mysqli_real_escape_string($db, $_GET['key']);
    		
    		if(!isset($download_key) or empty($download_key)){  
    			echo "Fehler mit der Downloadschlüssel übermittlung. Bitte versuchen Sie es erneut!";
    			
    			exit();
    		}
    		/// Überprüfung des Keys mit der Datenbank
    		$check_key     = $db->query("SELECT * FROM download_links WHERE downloadurl = '$get_download_info_row_download->downloadurl' AND download_key = '$download_key'");
    		$check_key_row = $check_key->fetch_object();
    		
    		/// Überprüfung ob der Key noch gültig ist
    		if($time - $check_key_row->time > 120){
    			echo "
    			<div class='active_err'>Der Downloadlink ist abgelaufen, bitte versuchen Sie es erneut!</div>
    			<input type=\"button\" onclick=\"window.location.href = '/downloads/$app/$Download_name'\" value=\"Zurück zur Download Ansicht\">
    			";
    			
    			exit();
    		}else{
    		/// Aufrufe + 1
    		$db->query("UPDATE downloads SET aufrufe = aufrufe+1 WHERE titel=$Download_name");
    		
    		/// Download von View Seite
    		if($get_download_info_row_download->view == "1"){
    		
    		/// Aufrufe + 1
    		$db->query("UPDATE downloads SET aufrufe = aufrufe+1 WHERE titel='$Download_name'");
    		
    		echo"
    		<div class=\"active_info\">Ihr Download startet automatisch, wenn nicht klicken Sie bitte <a href=\"$check_key_row->downloadurl\">hier</a>.</div>
    		
    		<input type=\"button\" onclick=\"window.location.href = '/downloads/$app/$Download_name'\" value=\"Zurück zur Download Ansicht\">
    		"; 							
    		}
    		else{
    		/// Direkt downloads
    			echo "<span style=\"text-align:center;\">Sie werden automatisch weitergeleitet!</span> $get_download_info_row->downloadurl";
    		}
    		}  
    		 echo "<meta http-equiv='refresh' content='2.5; URL=$check_key_row->downloadurl'>";
    		}
    		/// Ende des Download Verfahrens & Fehlermeldung falls keine action und co Vorhanden ist die stimmt
    		else{
    			echo"Download wurde nicht gefunden!";
    		}
    	
    	mysqli_close($db);
    ?>


    Oder: http://marvinkleinmusic.de/downloads/Magic%20Piano/Let%20Me%20Love%20You

    Beitrag zuletzt geändert: 9.3.2015 23:05:21 von marvinkleinmusic
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Oder auch eine Möglichkeit, vielleicht in der Suche?

    <script type="text/javascript">
    			function search(){
    				xmlhttp=new XMLHttpRequest();
    				xmlhttp.open("GET","/datafile.php?value="+document.form1.searchinput.value,false);
    				xmlhttp.send(null);
    				document.getElementById("searchItems").innerHTML=xmlhttp.responseText;
    			}
    		</script>


    <?php require_once("connect/config.php");
    	
    	@$db = mysqli_connect($url, $user, $pw, $dbname);
    	
    	$key =mysqli_real_escape_string($db, $_GET["value"]);
    	
    	if(!empty($key)){
    		$suchen = $db->query("SELECT * FROM downloads WHERE titel LIKE ('$key%') ORDER BY titel ASC;");
    		$treffer = $suchen->num_rows;
    		if(empty($treffer)){
    			echo "<li>Keine Suchtreffer gefunden.</li>";
    		}else{
    			while($row = $suchen->fetch_array()){
    				echo "<li><a href='/downloads/" . $row['kategorie'] . "/" . $row['titel'] . "'>";
    				echo $row['titel'];
    				echo "</a></li>";
    			}
    			echo "<li>Suchtreffer: $treffer</li>";	
    		}
    	}
    	
    ?>
  4. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Ja, es gibt eine Möglichkeit für SQL-Injection.

    Schau dir die Zeilen 153 und 293 an. Der Fehler von 153 (es gibt mehrere gleichartige) lässt sich allerdings nur nutzen, wenn man Daten in die Tabelle eintragen kann, 293 hingegen erlaubt sicher eine Injection, denn dort fehlen die Anführungszeichen (
    '
    ).
  5. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hmm wie soll denn in der Zeile 293 eine Injection möglich sein? Wenn ich es richtige verstehe wird ja nur der Wert aus der DB um 1 erhöht, also was ist da falsch?

    Ebenso bei Zeile 153, normalerweise ist es nicht möglich den Inhalt der Variabel zu verändern.


    Die Suche ist aber soweit sicher?

    LG


    EDIT:// Zeile 293 gefixt. Jedoch kann diese nicht der Auslöser für die Verluste in der DB sein, da aktuell keine Downloads nach dem direkt verfahren geladen werden.

    Beitrag zuletzt geändert: 10.3.2015 20:51:50 von marvinkleinmusic
  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    marvinkleinmusic schrieb:
    Hmm wie soll denn in der Zeile 293 eine Injection möglich sein? Wenn ich es richtige verstehe wird ja nur der Wert aus der DB um 1 erhöht, also was ist da falsch?
    Dass die Anführungszeichen gefehlt haben war falsch. Und da ein Escapen nur dann schützt, wenn auch sichergestellt ist, dass es sich um einen String handelt, hast du hier ein Problem. Ein Angreifer kann so zwar kein Anführungszeichen einschleusen, aber er könnte einfach beliebiges SQL an dein Statement anhängen. Der Fehler in Zeile 153 wäre genau dann ausnutzbar, wenn man in die Tabelle beliebige Daten eintragen kann und somit Kontrolle über die Variable hat. Eventuell führt ja der Fehler in 293 schon dazu.

    Wenn du die behoben hast sehe ich jetzt nichts mehr …
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!