[PHP] Automatische authenticatie

Pagina: 1
Acties:
  • 126 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zoek achter een manier om automatisch te authenticaten...

Even korte situatieschets:
- Wij hebben een domein, dus met allemaal users :p
- Wij hebben een linux bakje, waarop apache en php enzo draait.

Nu wil ik op 1 of andere manier een webpage maken, zodat als een persoon daarheen surft, ik automatisch weet welke user dit is op het domein.

Ik heb daar ooit eens van gehoord dat dat mogelijk was, maar waarachter moet ik dan beginnen zoeken?

Acties:
  • 0 Henk 'm!

  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
Kan via verschillende manieren:

1. Maak een script in PHP en laat het ip-adres en tijd van de bezoeker wegschrijven (naar een database?!) en koppel daar namen aan.

2. Kijk in je Apache-log (of doe dat met een programma welke de log netjes kan weergeven)

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


Acties:
  • 0 Henk 'm!

Verwijderd

Ind maak een database met de interne ipadressen en controleer daar dan op.

dacht dan wel dat het misschien http_x_forwarded ofzoiets is.
Maar kijk dan wel uit dat als je de site niet lokaal hebt staan en er komt
iemand anders die een zelfde lokale iprange gebruikt als jou dat ie dan automatisch geauthenticeerd wordt.

Heb je geen andere niet zo beveiligings gevoelige oplossing?

Acties:
  • 0 Henk 'm!

  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 09:34

Eijkb

Zo.

1 keer inloggen en vervolgens cookies of sessions gebruiken. Methode hierboven werkt natuurlijk ook. 100den wegen die naar Rome leiden en 100den scripttaal gerichte sites die kant en klare oplossingen hebben.

.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
TRON> IP = DHCP ...

En het is voor iedere user dat ik iets anders moet laten zien (allee ja, bvb dat ik ergens in een variable krijg user='svit530' (zenne kik hier)). Dan doe ik een check in welke group die zit op de win2k server... En dan weet ik wat ik die persoon mag laten zien. Zo zou het moeten worden. Maar ik weet dat er zoiets is met IE, als je bepaalde header stuurt dat die eerst probeert met de user aan te loggen waarmee je in windows bent aangemeld... Maar ik weet niet meer exact wat dit is :S

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 09 September 2003 @ 14:37:
TRON> IP = DHCP ...

En het is voor iedere user dat ik iets anders moet laten zien (allee ja, bvb dat ik ergens in een variable krijg user='svit530' (zenne kik hier)). Dan doe ik een check in welke group die zit op de win2k server... En dan weet ik wat ik die persoon mag laten zien. Zo zou het moeten worden. Maar ik weet dat er zoiets is met IE, als je bepaalde header stuurt dat die eerst probeert met de user aan te loggen waarmee je in windows bent aangemeld... Maar ik weet niet meer exact wat dit is :S
Dan moet je ook IIS draaien volgens mij. Tis mij nog nooit gelukt met php apache omdat geintje uit te halen want ik wilde hetzelfde voor een internetsite voor een school, maar helaas dat werkte dus niet.

Waarom niet gewoon nog een keer laten inloggen? Normaal werkt toch altijd iedereen achter zijn/haar eigen pc en en zetten deze toch bijna nooit uit dus hoeven ze ook nooit meer in te loggen.

Maar waarom zo de beveiliging verlagen?!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mmmm, gaat dit echt niet op apache/php ?
Dat zou wel vreed spijtig zijn :x

Waarom niet laten herinloggen? Kan ik natuurlijk ook wel doen, maar besef je wel welke domme mensen hier werken? :) [Dat is natuurlijk geen echte reden, de echte reden is dat ik gewoon zo simpel mogelijk wil maken voor de eindgebruiker. Dus dat ze ook niet kunnen inloggen als iemand anders!!]

[ Voor 32% gewijzigd door Verwijderd op 09-09-2003 14:53 ]


Acties:
  • 0 Henk 'm!

  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
IP=DHCP, [s]nah, niet in het bedrijf waar ik werk iig[s/]. Ik zie van elke IN het bedrijf staande computer wie er op m'n INTERNE site komt.

-edit-
ook in het bedrijf waar ik werk |:( d'oh


Ja, je kunt niet zien op deze manier welke users erop komen. Maar wel als iedereen achter 1 pc zit. Geen oplossing voor het probleem dus.

[ Voor 59% gewijzigd door TRON op 09-09-2003 15:13 ]

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


Acties:
  • 0 Henk 'm!

Verwijderd

Je zou kunnen kijken of de browser geen Kerberos id meestuurt (mits je binnen een activedirectory zit, denk niet dat ie er in zit, maar via kerberos zou je eventueel weer via SAMBA (beta) kunnen authenticeren. Denk niet dat het helemaal soepel gaat en het is een omweg, maar google is je vriend...

En de term die je zoekt zou "unified logon" moeten zijn.

[ Voor 10% gewijzigd door Verwijderd op 09-09-2003 14:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
jantje> nee, het stuurt niets speciaals mee :x & ik zal es ne keer nachecken.

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
<?php
   /*
    Getting netbios info
    CopyLeft 2002 (GNU GPL V2) by polo
   */

    error_reporting(E_ALL);

   /* get the ip of the client */
   if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
    $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
   } else {
    $ip = $_SERVER["REMOTE_ADDR"];
    }
   echo 'ip : '.$ip.'<br>';

   /* send a "special" packet */
   $fp = fsockopen('udp://'.$ip, 137);
   fwrite($fp, "\x80b\0\0\0\1\0\0\0\0\0\0 CKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\0\0!\0\1");

   /* wait 2 secs, and get the data */
   socket_set_timeout($fp, 2);
   $data = fread($fp, 256);

   /* get netbios records number */
   $nbrec = ord($data[56]);

   /* display nebios records : the username is a record of type 3 */
   echo '<table border="1">';
   echo '<tr><th>no</th><th>type</th><th>value</th></tr>';
   for($i = 0; $i < $nbrec; $i++) {
    $offset = 18 * $i;
    printf ("<tr><td>%02d</td><td>%02X</td><td>%s</td></tr>",
        $i,
        ord($data[72 + $offset]),
        trim(substr($data, 57 + $offset, 15)));
   }
   echo '</table>';
?>


Hier heb je code hoe vandat machien die gegevens te halen... Nu moet ik nog enkel uitzoeken welk de juiste user is die op dat machien is ingelogged...

Thx alvast mensen!

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Je kunt dit oplossen met de ldap functionaliteit lijkt mij. Daar kun je de gebruikers mee uit je AD halen.

Acties:
  • 0 Henk 'm!

  • grizzlybear
  • Registratie: Oktober 2001
  • Laatst online: 02-09 06:35
Je zou een kunnen kijken naar de module voor apache: mod_ntlm, daarmee kun je gebruikers authenticeren tegen een Windows domein. Voor Apache 2.x is daar mod_sspi voor.

Kijk anders ook eens naar: http://twiki.org/cgi-bin/..._authenticated_against_a_

[ Voor 28% gewijzigd door grizzlybear op 09-09-2003 18:13 . Reden: link toegevoegd ]


Verwijderd

Topicstarter
mod_auth_sspi schijnt enkel te bestaan voor windows. Ik heb dan dit proberen te converteren naar linux, maar no such luck.

Ik zal nu eens zien naar mod_ntlm

Over die LDAP kan ik vrij kort zijn: daar zit bij mijn beste weten niet in welk ip een bepaalde user heeft op dit moment. Als ik mis ben, corrigeer me aub. Want dan is deze optie het beste wat ik me kan indenken!

Verwijderd

Topicstarter
NTLM is het dus ook niet... NTLM is het echt authenticaten tegen een bestaand domein! Dit is al zeer dicht in de buurt. Maar ik zou ZELF moeten kunnen zien welke persoon nu weer inlogged...

Misschien ben ik gewoon niet duidelijk genoeg :x

Er komt iemand op mijn website. Op 1 of andere manier kan ik dan zien met welke gebruiker deze persoon is ingelogged op zijn pc (op het domein). Dan kan ik naar de LDAP gaan & zien ... Wat is die zijn naam? (ik zeg: Hallo '...') ... Ik check zijn afdeling (ik toon bvb enkel dingen die met 'boekhouding' te maken hebben) ... Ik check zijn rechten op het domein (bvb poweruser voor afdelingsverantwoordelijken) en deze persoon heeft dan bvb opties om nieuwe gebruikers aan te maken in zijn afdeling.

Ik zit hier nu maar wat uit mijn duim te zuigen, maar dat is een reeele doelstelling... Is er niets op heel de wereld die dat kan? Of moet ik dat zelf gaan schrijven als module? (soort van combo van sspi & ntlm & ldap)?

  • WPN
  • Registratie: Augustus 2003
  • Laatst online: 24-07 21:14

WPN

D:\Documents and Settings\shinobi>%username%
'shinobi' is not recognized as an internal or external command,
operable program or batch file.


dit is op een XP client en werkt ook op een win2K client
als je in php nou met shell-exec die opdracht geeft ALS het clientside kan.... (weet niet uit mn hoofd, heb nu tijdens het typen het gevoel dat het serverside gebeurt :()
en dan filterd op de '

als het 9x clients zijn werkt het geloof ik niet


cookie is heel handig kan je de gebruikersnaam na 1 keer inloggen in laten staan en bij authenticatie geen problemen meer, als je cookie oneindig lang laat staan

dit als de users altijd op zelfde station zitten en niet ff af en toe wisselen.
(kan je uitlog optie voor maken)

Als ik denk zoals ik dacht, dan doe ik zoals ik deed, als ik doe zoals ik deed, dan denk ik zoals ik dacht! Cogito Ergo Sum


Verwijderd

Topicstarter
Peluso> inderdaad is het enkel serversided :) & ik kan er niet vanuit gaan dat users altijd op hetzelfde station zijn ingelogged :x

En wij gebruiken ook geen zwevende profielen. Dus één van de enigste opties die ik heb is te authenticaten wie de huidige webpage gebruikt tegen de LDAP

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Het lijkt me dat dit al eens gedaan moet zijn omdat het een heel algemeen idee is. Het grote probleem is gewoon dat je geen toegang hebt tot de machine van de gebruiker. Anders was het vrij eenvoudig uit te zoeken. Ik denk dat je eens moet gaan kijken wat active X voor toegang heeft tot dit soort gegevens.
Verwijderd schreef op 10 September 2003 @ 14:17:
En wij gebruiken ook geen zwevende profielen. Dus één van de enigste opties die ik heb is te authenticaten wie de huidige webpage gebruikt tegen de LDAP
Gebruik je voor iedereen een standaard profiel? Ik neem aan dat ze wel per persoon een username en password hebben anders gaat het natuurlijk niet 8)

[ Voor 40% gewijzigd door djluc op 10-09-2003 14:22 ]


  • Eastern
  • Registratie: Augustus 2000
  • Laatst online: 17-09 19:13
Kan je geen NTLM authenticatie header sturen? Dat kan namelijk wel met PHP, alleen weet ik niet hoe de informatie terug gestuurd wordt. De header sturen gaat zo:

PHP:
1
2
3
4
<?php
header('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM',FALSE);
?>


Dan krijg je een NTLM header te zien. Een MS-Proxy stuurd die volgens mij ook, en je hoeft alleen info in te vullen als je niet voorkomt in zijn lijstje.

Het is mij nog nooit gelukt om die spullen uit te lezen, maar het moet wel kunnen lijkt me!

ff google:

PHP does not support NTLM authentication. ASP does, Java does, Perl does, Python does, but PHP don't =)

However you might try this:

PHP:
1
2
3
4
5
6
7
8
<?php
echo "Your username is: ".$_SERVER["AUTH_USER"];
echo "<br>";
echo "The authentication type is: ".$_SERVER["AUTH_TYPE"];
echo "The digest of your password is: ".$_SERVER["HTTP_AUTHORIZATION"];
echo "<br>";
echo "The username of the server user is: ".$_SERVER["LOGON_USER"];
?>


This will only work under IIS, for Apache you will need to install a additional module (mod_ntlm).

link

:: Ik ga het zelf ook nog een keer proberen, lijkt me interssant! ::

[ Voor 57% gewijzigd door Eastern op 10-09-2003 14:42 ]


  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Zomaar een ideetje:

Je hebt het IP adres. Nu kun je met smbclient (op een of andere manier) kijken welke user er op dat IP zit, of waar ie is ingelogd op de server. Daaruit kan je wellicht halen bij welke groep hij hoort.

Smbclient kan je wel aanroepen vanuit PHP en dan de tekst analyseren.

Koop of verkoop je webshop: ecquisition.com


  • hammerhead
  • Registratie: April 2000
  • Laatst online: 01-09 08:00
Weet dat er bij ons op de faculteit was die had een scriptje geschreven die liet zien wie er allemaal waren ingelogd op de Windows 2000 workstations. Vond het best interessant hoe hij dit had gedaan en navraag bij hem leverde op dat hij gebruik maakte van ident. Hij maakte gewoon een verbinding naar poort 113, stuurde wat random tekens en las daarna gewoon de gebruikersnaam uit. Weet niet of het een standaard service van windows is. Weet ook niet voor welke versies van windows dat het geval zou zijn....

Maar zoiets zo in ieder geval misschien wel te gebruiken zijn. Echter als mensen zelf een ident programma schrijven kunnen ze zich als iemand anders voordoen. Gaat er dus wel vanuit dat mensen daar verder niets aan kunnen veranderen :)

Aviation is proof that given the will, we have the capacity to achieve the impossible.
--Eddie Rickenbacker


  • Eastern
  • Registratie: Augustus 2000
  • Laatst online: 17-09 19:13
Weet dat er bij ons op de faculteit was die had een scriptje geschreven die liet zien wie er allemaal waren ingelogd op de Windows 2000 workstations. Vond het best interessant hoe hij dit had gedaan en navraag bij hem leverde op dat hij gebruik maakte van ident. Hij maakte gewoon een verbinding naar poort 113, stuurde wat random tekens en las daarna gewoon de gebruikersnaam uit. Weet niet of het een standaard service van windows is. Weet ook niet voor welke versies van windows dat het geval zou zijn....
Het moet natuurlijk wel een gedegen oplossing zijn die niet bij de minst-of-geringste windows update weer in de war gaat!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Het is mogelijk om via een van deze poorten inderdaad de ingelogde user te achterhalen (GRC.com maakt hier oa gebruik van). Ik dacht dat dit via 135 ging; volgens mij is dat precies het script dat hier wordt gepost: [rml]KaReL in "[ PHP] Automatische authenticatie"[/rml]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • Eastern
  • Registratie: Augustus 2000
  • Laatst online: 17-09 19:13
Het is mogelijk om via een van deze poorten inderdaad de ingelogde user te achterhalen (GRC.com maakt hier oa gebruik van). Ik dacht dat dit via 135 ging; volgens mij is dat precies het script dat hier wordt gepost: KaReL in "[PHP] Automatische authenticatie"
Grappig, dat is dit topic! 8)7

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Eastern schreef op 10 September 2003 @ 15:46:
[...]


Grappig, dat is dit topic! 8)7
No shit sherlock! :+ Ik zie alleen nu pas dat die tekst door de TS zelf is gepost :X

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Kzen daar nu al een pakske op't zoeken geweest. En dus wat ik gevonden em is hetvolgende: 'NTLM authentication moet gebeuren op niveau van de Apache server'.

Dat is het kl*tige... Wat ik zou willen is dat ik kan authenticaten op niveau van PHP. Maar de NTLM gebeurd op niveau van de server. Zijn er nog andere opties die jullie kunnen bedenken voor single-sign-on scripts te maken (maw, dat de user 1x zich inlogt op't domein en een "gepersonaliseerde" webpage krijgt op het intranet?)

Thx ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wat ik dus doe op het moment:
1/ ik zoek het ip op.
2/ Ik doe een netbios-query. Daar haal ik de username mee op (no: 06 & type: 03).
3/ Dan doe ik een ldap_search op "samaccountname=$username"
4/ Als ik dan een "$info" array trugkrijg, weet ik dat die bestaat & kan ik de webpage tonen hoe het moet voor die bepaalde user.

Dit werkt. Akkoord, maar is er geen andere manier via plugins ofzo? (Zonder dat ik een HELE webpage/webdirectory moet afschermen?). Want mod_ntlm werkt via het beperken van access tot een bepaalde directory. Wat ik wil bereiken is dat iedereen dezelfde pagina's gebruikt, maar dat er gewoon gechecked word WIE op dit moment is ingelogged om de pagina's te tonen if u know what i mean.

[ Voor 5% gewijzigd door Verwijderd op 23-09-2003 11:17 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Karel, vraagje hoe lees jij het resultaat van de netbios-query uit. Want ik heb het geprobeerd met bovenstaand script en dan type 3 uitlezen, maar de nummering is afhankelijk van wat er geinstalleerd is op die comp met netbios,
en sommige laptops hebben ook nog vpn verbindingen ertussen staan en dan kan ik geen nr gebruiken. ( Let op, ik wil een algemene "module" hebben, niet iets wat anders is voor laptops dan voor desktops )
En dan geeft hij bij XP ook nog eens een keer de computernaam terug als type 3.

Onder xp en ie6 en vpn verbinding krijg ik dus 2 waardes terug als type 3. De computernaam en de gebruikersnaam. Hoe filter ik hier weer de gebruikers naam uit???

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik check dat tegen de LDAP server. Als het een computer is die aangemeld is op het domein komt er "$veld[0][serviceprincipalname]" te staan... Dan betekent het dat het een computer is... Als dat er niet staat, is het een user.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Karel, heb je misschien nog ergens een link liggen naar de website waar je het script vandaan hebt. Want ik ben nu even aan het kijken in netbios documentatie, maar dat is vrij veel leeswerk, en ik zie even niet hoe wat in het script type heet hoe dat voluit in de rfc zou moeten staan...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hier een beetje boven, gepost door Eastern: http://search.experts-exc...uages/PHP/Q_20562144.html

En daar staat niet echt veel info in... En ik heb de RFC's ook nagekeken, maar werd dat beu & zen dan mor gaan checken tegen den LDAP, duurt toch alles bij elkaar minder as nen seconde ;)
Pagina: 1