[php] digest beveiligde pagina aanroepen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 19-09 12:09
hoi,

voor een studie opdracht maak ik gebruik van een service die bij een bedrijf draait achter een http-digest authentication. Ik heb logingegevens van hun ontvangen, tot zover geen probleem :)

De bedoeling is dat je een string stuurt (de url van de service) + enkele parameters. Als je dit direct in je browser doet krijg je een digest-auth login popup te zien en als je de logingegevens invult zie je het resultaat. Het probleem is nu dat dit alles geautomatiseerd moet gebeuren, dwz dat php jou moet inloggen.
Nu ben ik een beetje aan het zoeken geweest er vind wel dingen hoe je zelf mensen kunt authentiseren alleen niets over hoe je zelf deze headers stuurt. Hier heb je ook nog een shet probleem dat je de nounce niet weet....

Volgens mij moet je dus eerst de pagina oproepen, daar de nounce uithalen en dan de parameters + nounce + logingegevens terugsturen. Ik heb alleen geen flauw idee hoe dat gaat, iemand zoiets al eens gedaan of zit ik op de verkeerde manier te denken?

Acties:
  • 0 Henk 'm!

Verwijderd

Open een socket, maak met de server op poort 80, en doe rauwe HTTP requests. Eventueel kun je gebruik maken van CURL om de boel iets te vergemakkelijken.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je moet uiteraard eerst de nonce achterhalen.

Hoe de huidige requests/responses eruit zien kan je verder ook gewoon bekijken natuurlijk, bijvoorbeeld door gebruik te maken van een pakket-logger zoals Ethereal.

{signature}


Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Als je ethereal gaat gebruiken, zet dan wel even de rest van je downloads uit (bittorent voornl. ;) ), tenzij je gaat werken met rules/filters maar dat is nogal een gepriegel als je het voor het eerst ziet.

Start ethereal
Open je browser
Laat ethereal beginnen met loggen
Log in in je browser ( op die website )
Laat ethereal stoppen.

In ethereal kan je dan de headers bekijken die verzonden zijn door je browser. Je moet hier misschien wel even voor zoeken, maar echt moeilijk is het niet.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 19-09 12:09
ethereal is het probleem niet, daar heb ik al genoeg mee gespeeld dus ik zorg ervoor dat ik alleen de desbetreffende poort scan ;)

Stel dat je die nounce nu hebt (ik heb een vermoedde dat die telkens hetzelfde is en ik heb al gesnifferd), hoe stuur je dan iets terug :S Je zult de headers op een of andere manier moeten zien op te maken...

Acties:
  • 0 Henk 'm!

  • IEF
  • Registratie: Februari 2004
  • Laatst online: 18-09 08:03

IEF

Why so serious?

ga eens kijken op http://nl2.php.net/manual/nl/function.curl-setopt.php

en hier: http://nl2.php.net/manual/nl/ref.curl.php

en why not: http://www.higherpass.com...o-Query-Remote-Servers/5/

met cURL kun je heel makkelijk de pagina opvragen, en HTTP digest doen.
CURLOPT_HTTPAUTH

The HTTP authentication method(s) to use. The options are: CURLAUTH_BASIC, CURLAUTH_DIGEST, CURLAUTH_GSSNEGOTIATE, CURLAUTH_NTLM, CURLAUTH_ANY, and CURLAUTH_ANYSAFE.

You can use the bitwise | (or) operator to combine more than one method. If you do this, CURL will poll the server to see what methods it supports and pick the best one.

CURLAUTH_ANY is an alias for CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLAUTH_ANYSAFE is an alias for CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

[ Voor 11% gewijzigd door IEF op 12-05-2006 18:39 ]


Acties:
  • 0 Henk 'm!

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 19-09 12:09
ik heb het op dit moment werkend via CURL.

PHP:
1
2
3
4
5
6
7
8
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'url');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_USERPWD, 'loginnaam:password');

$data = curl_exec($ch);
curl_close($ch);


de data kun je nu verder bewerken of andere dingen mee doen. In mijn geval krijg ik het als XML terug wat je via het sturen van twee headers netjes kunt regelen

PHP:
1
2
header("Cache-Control: no-cache, must-revalidate");
header("Content-Type: application/xml; charset=UTF-8");


Wordt er een andere authenticatie methode toegepast, dan moet CURLAUTH_DIGEST vervangen worden door de goede ;) (zie de PHP-CURL manual).

[ Voor 8% gewijzigd door TheRebell op 12-05-2006 21:13 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
TheRebell schreef op vrijdag 12 mei 2006 @ 18:22:
Stel dat je die nounce nu hebt (ik heb een vermoedde dat die telkens hetzelfde is en ik heb al gesnifferd),
offtopic:
Het is dus nonce, wat van 'number used once' zou moeten afkomen. Maar ja, als het meerdere keren gebruikt wordt is het gewoon een slecht verzinsel en mag je het wel nounce noemen. :P

{signature}


Acties:
  • 0 Henk 'm!

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 19-09 12:09
offtopic:
ach, of het nu nonce of nounce is...iedereen weet (blijkbaar) wat er bedoeld wordt dus ;)
Maar je hebt gelijk, het is nonce
Pagina: 1