[php]met php inloggen op andere php site (met cookies)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Vanwege het niet toelaten om content uit te wisselen tussen een pagina van een ander domein met een pagina van je hdd (cross-site-scripting/sandbox security...) heb ik in php een scriptje geschreven: index.php

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php 
$url=$_GET['download'];
$lines = file ($url);

$string=""; 
for($i=0;$i<count($lines);$i++){ 
$string.=$lines[$i]."\n"; 
}

$filename = 'temp.html';

if (is_writable($filename)) {
   if (!$handle = fopen($filename, 'w')) {
         print "Kan het bestand niet openen ($filename)";
         exit;
   }
   if (!fwrite($handle, $string)) {
       print "Kan niet schrijven naar bestand ($filename)";
       exit;
   }
   print "Succes, geschreven ($string) naar bestand ($filename)";
   fclose($handle);
} else {
   print "Het bestand $filename is niet schrijfbaar";
}
?>


wat ik oproep door bvb http://localhost/public/index.php?download=http://www.tweakers.net in een ander frame te bezoeken en dan zo het ander frame in te lezen/te bewerken (ik gebruik het programma'tje phpdev als php server (aangezien het file() commando niet toegelaten is op de gratis online php servers die ik tot nu toe probeerde))

Maar nu het probleem:
de pagina van een vriend die ik eigenlijk wou bewerken is ook een php pagina waarvoor je moet inloggen met gebruikersnaam en wachtwoord. Je krijgt dan een cookie en dan blijf je ingelogd tot je enkele minuuten niets meer doet op de site. (naam van cookie = PHPSESSID, verloopt op het einde van de sessie... )

de vraag: hoe zou ik hieraan beginnen? En naar welke commando's zou ik best zoeken op php.net?
Want hierover is enkel onnuttige informatie te vinden op google (of ik zoek naar de verkeerde termen)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ps: er wordt ingelogd op zijn php site dmv volgende code:

HTML:
1
2
3
4
5
6
7
8
<form name="form1" action="password.php" method=POST>
    <table class="login" align="center" valign="middle" border="0">
        <input type="text" value="" name="mail2" size="30"></td></tr>
                <input type="password" name="password2" size="20">
        <input name="log" type="checkbox">Log mij automatisch in
        <input type="submit" name="submitt" value="Verzenden">&nbsp;
    </table>
</form>


Je kan ook inloggen met
code:
1
http://www.dehostnaam.com/gebruiker77/site/password.php?mail2=hallo@mail.com&password2=hetwachtwoord

[ Voor 61% gewijzigd door Verwijderd op 18-06-2005 15:48 ]


Acties:
  • 0 Henk 'm!

  • mouse256
  • Registratie: Mei 2003
  • Laatst online: 30-12-2024
Ik denk dat je best even kijkt naar de functie fsockopen
Daarmee kan je heel de header uitsturen en zo de cookie en/of POST variabelen ook meesturen...

Als je niet weet hoe je zo'n header moet maken: onderzoek je internet verkeer dan eens met bvb ethereal. Een andere optie die ik eigenlijk nog handiger vind is livehttpheaders (plugin voor mozilla (firefox))

Acties:
  • 0 Henk 'm!

  • Andre-85
  • Registratie: April 2003
  • Niet online

Andre-85

Sid

Als ik je goed begrijp denk ik dat je naar cURL moet kijken

Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit is wat ik krijg met de ff plugin:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
]http://gradict.kahosl.be/mm/bende/password.php

POST /mm/bende/password.php HTTP/1.1
Host: gradict.kahosl.be
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl-NL; rv:1.7.8) Gecko/20050511 Firefox/1.0.4
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: nl-NL,nl;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://gradict.kahosl.be/mm/bende/index.php
Cookie: cookie_pc=561; cookie_mail=mijnmail%40hotmail.com; PHPSESSID=3mjipa5kir38g24mj1cdv1bbk3
Content-Type: application/x-www-form-urlencoded
Content-Length: 70
mail2=mijnmail%40hotmail.com&password2=mijnwachtwoord(aangepast)&submitt=Verzenden
HTTP/1.x 302 Moved Temporarily
Connection: close
Date: Sat, 18 Jun 2005 14:46:37 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET, PHP/5.0.3-dev
Content-Type: text/html
Set-Cookie: cookie_mail=mijnmail%40hotmail.com; expires=Sat, 21-Jan-2006 14:46:37 GMT
Set-Cookie: cookie_password=deleted; expires=Fri, 18-Jun-2004 14:46:36 GMT
Set-Cookie: PHPSESSID=3mjipa5kir38g24mj1cdv1bbk3; path=/
Set-Cookie: cookie_pc=561; expires=Sun, 05-Feb-2006 02:19:57 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: start2.php
----------------------------------------------------------
http://gradict.kahosl.be/mm/bende/start2.php

GET /mm/bende/start2.php HTTP/1.1
Host: gradict.kahosl.be
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl-NL; rv:1.7.8) Gecko/20050511 Firefox/1.0.4
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: nl-NL,nl;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://gradict.kahosl.be/mm/bende/index.php
Cookie: cookie_pc=561; cookie_mail=mijnmail%40hotmail.com; PHPSESSID=3mjipa5kir38g24mj1cdv1bbk3

HTTP/1.x 200 OK
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET, PHP/5.0.3-dev
Set-Cookie: PHPSESSID=3mjipa5kir38g24mj1cdv1bbk3; path=/
Date: Sat, 18 Jun 2005 14:46:38 GMT
Connection: close


Dus als ik me niet vergis, moet het iets zijn à la

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?

$request = "POST /mm/bende/password.php HTTP/1.1";
$request = "Host: gradict.kahosl.be";
$request = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl-NL; rv:1.7.8) Gecko/20050511 Firefox/1.0.4";
$request = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$request = "Accept-Language: nl-NL,nl;q=0.7,en;q=0.3";
$request = "Accept-Encoding: gzip,deflate";
$request = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$request = "Keep-Alive: 300";
$request = "Connection: keep-alive";
$request = "Referer: http://gradict.kahosl.be/mm/bende/index.php";
$request = "Cookie: cookie_pc=561; cookie_mail=mijnmail%40hotmail.com; PHPSESSID=3mjipa5kir38g24mj1cdv1bbk3";
$request = "Content-Type: application/x-www-form-urlencoded";
$request = "Content-Length: 70";
$request = "mail2=mijnmail%40hotmail.com&password2=mijnwachtwoord(aangepast)&submitt=Verzenden";
$request = "\r\n";

$fs = fsockopen("http://gradict.kahosl.be/mm/bende/password.php
", 80, $errno, $errstr, 20);
if (!$fs) {
    echo "$errstr ($errno)<br>\n";
} else {
  fputs($fs, $request);
  //echo $request;
  while (!feof($fs)) {
    $buffer = fgets($fs, 1024); //4096
    if($content == false){
      $strLine = ereg_replace("[\r\n]", "", $buffer);
      if(strlen($strLine) == 0){
        $content = true;
      }
   }else{
     echo $buffer;
   }
}
  fclose ($fs);
}
?>

Acties:
  • 0 Henk 'm!

  • mouse256
  • Registratie: Mei 2003
  • Laatst online: 30-12-2024
wat dacht je van je variabele altijd langer te maken ipv altijd te overschrijven? dus .= ipv = :Y)
En voor de rest heb je meestal lang niet alles nodig wat in de header staat:
PHP:
1
2
3
4
5
6
7
8
9
$postdata = "mail2=mijnmail%40hotmail.com&password2=mijnwachtwoord(aangepast)&submitt=Verzenden";

$request = "POST /michael.demeerssema/bende/password.php HTTP/1.1\r\n";
$request .= "Host: gradict.kahosl.be\r\n";
$request .= "Cookie: cookie_pc=561; cookie_mail=mijnmail%40hotmail.com; PHPSESSID=3mjipa5kir38g24mj1cdv1bbk3\r\n";
$request .= "Content-Type: application/x-www-form-urlencoded\r\n";
$request .= "Content-Length: ".strlen($postdata)."\r\n";
$request .= $data."\r\n";
$request .= "\r\n";


Dit zijn volgens mij de enige essentiele headers (en ik twijfel dan nog over die content-type ;) )
Maar je moet dus wel na elke regel een \r\n meesturen, en nog een \r\n (lege regel) op het einde...
ook moet je Content-Length wel gelijk zijn aan de lengte van je data, anders gaat de server jouw request niet echt snappen...

moet de fsockopen ook niet dit zijn?
PHP:
1
$fs = fsockopen("gradict.kahosl.be", 80, $errno, $errstr, 20);


ps: zoals andre-85 zegt kan het ook waarschijnlijk met curl...
Ik denk zelf dat dit eenvoudiger is, maar op mijn server was die module niet geïnstalleerd, vandaar dat ik toen ook met fsockopen ben gaan spelen...

[ Voor 33% gewijzigd door mouse256 op 21-06-2005 20:30 . Reden: code tags vervangen door php tags ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
$request = "GET /mm/bende/index.php HTTP/1.1\r\n";
$request .= "Host: gradict.kahosl.be\r\n";
$request .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl-NL; rv:1.7.8) Gecko/20050511 Firefox/1.0.4\r\n";
$request .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
$request .= "Accept-Language: nl-NL,nl;q=0.7,en;q=0.3\r\n";
$request .= "Accept-Encoding: gzip,deflate\r\n";
$request .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
$request .= "Keep-Alive: 300\r\n";
$request .= "Connection: keep-alive\r\n";
$request .= "\r\n";

$fs = fsockopen("gradict.kahosl.be", 80, $errno, $errstr, 20);
if (!$fs) {
    echo "$errstr ($errno)<br>\n";
} else {
  fputs($fs, $request);
  //echo $request;
  while (!feof($fs)) {
    $buffer .= fgets($fs, 4096);


}
  fclose ($fs);


$filename = 'temp.html'; 
if (is_writable($filename)) { 
   if (!$handle = fopen($filename, 'w')) { 
         print "Kan het bestand niet openen ($filename)"; 
         exit; 
   } 
   if (!fwrite($handle, $buffer)) { 
       print "Kan niet schrijven naar bestand ($filename)"; 
       exit; 
   } 
   print "Succes, geschreven ($buffer) naar bestand ($filename)"; 
   fclose($handle); 
} else { 
   print "Het bestand $filename is niet schrijfbaar"; 
}


}
?>

lijkt het voorlopig te doen :)

[ Voor 59% gewijzigd door Verwijderd op 29-12-2010 17:18 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Kben nu juist op een wel handig commando gestoten namelijk get_headers()
PHP:
1
2
3
4
<?php
$url = 'http://gradict.kahosl.be/mm/bende/index.php';
print_r(get_headers($url));
?>


maar ik krijg de volgende error boodschap:
Fatal error: Call to undefined function: get_headers() in g:\phpdev\www\public\index2.php on line 3
Wat zou dit kunnen zijn?

Want regex'en heb ik geen verstand van (om cookies te lezen)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Vanaf PHP5.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat had ik net geïnstalleerd maar het maakt geen verschil
ps: ik gebruik phpdev apache als server

edit: laat maar
PHP:
1
2
3
4
5
6
<?php
$string="blablabla mlvkhq ekljh Set-Cookie: PHPSESSID=uf30i0v0bnh3o6a4qv4pisv4n6; path=/ wekmjqehrj";
preg_match_all("/PHPSESSID=([\s\S]*?);/im", $string, $matches);
$stringmatches=$matches[1][0];
print_r($stringmatches);
?>

doet het ook naar behoren :)

[ Voor 88% gewijzigd door Verwijderd op 22-06-2005 18:18 ]

Pagina: 1