Miért csatlakozik helytelen jelszóval?

+1 vote
asked Apr 11, 2013 in IRF tantárgy by anonymous  

Tesztelésnél megpróbáltam az egyik virtuális gépről inditva egy másikról adatokat lekérni(Mindkettő linux, wbemcli-vel), és azt tapasztaltam, hogy ha egy betűvel rövidebb vagy hosszabb jelszót adok meg (pl 'LaborImag') akkor még sikeres az adat lekérés. (Előzőleg volt már sikeres adatlekérésem, a helyes jelszóval)
Ennek mi lehet az oka? Cache-li a jelszót, vagy nem minden lekérésnél hanem adott időnként van jelszó ellenőrzés?

commented Apr 11, 2013 by kviktor (84 points)  
Próbáld ki jelszó nélkül, szerintem úgyis fog menni.
commented Apr 11, 2013 by anonymous  
ha jelszó nélkül irom, akkor bekéri alatta mielőtt elküldené, ha beirom pl addig h "Labor" akkor HttpException hogy hibás név jelszó pár, de "LaborImag", v "LaborIma"-ra meg elküldi és vissza adja a kért adatokat
commented Apr 12, 2013 by micskeiz (2,873 points)  
reprodukálni tudtam én is, elég furcsa. Ha megnézed az sfcbd trace üzemmódjában, akkor minden egyes alkalommal küldi a base64-es jelszót, és mindig a jót küldi, csak tényleg a LaboraIma-ra már elfogadja. Valami string pointer hibára gyanakszom, de még ránézek a forrásra majd.

1 Answer

+1 vote
answered Apr 13, 2013 by micskeiz (2,873 points)  

Nem hagyott nyugodni, és végiglépkedtem gdb-vel, hogy hol rontja el az sfcb.

Rövid válasz

Sehol, nem az sfcb hibája. Valami az alap OS beállításokban van elrontva, mert például a login is beenged LaborImag jelszóval. Innentől kezdve a feladat szempontjából ez a hiba nyugodtan figyelmen kívül hagyható.

Hosszú válasz

Az SFCB PAM-ot használ, az végzi el helyette a hitelesítést.

A wbemcli HTTP Basic segítségével küldi át a jelszót. Ha az sfcbd-t így indítjuk:

sfcbd -t 8

Akkor látjuk a HTTP feldolgozó komponensének a trace üzeneteit, és itt látszik a Basic jelszó, valami hasonló sorban:

[1] [04/12/2013 13:28:25] 8095/0xb72da900 --- httpAdapter.c(978) : --- Header: Authorization: Basic bWVyZXM6TGFib3JJbWFnZWU=

Base64 decoder segítségével ellenőrizhető, hogy itt még jó.

Az üzenet feldolgozását a httpAdapter.c végzi, csak hogy ez a feldolgozás során indít minden kéréshez egy új szálat, úgyhogy nem olyan egyszerű debuggerrel csatalkozni hozzá.

Szerencsére van erre beépített cheat:

Sfcb Debugging

Rakjuk fel még az sfcb debug csomagjait:

zypper in sblim-sfcb-debuginfo
zypper in sblim-sfcb-debugsource

Így már akkor gdb-ből látjuk rendesen a forrását és a szimbólumokat.

A következő függvényre érdemes töréspontot elhelyezni, ha már túljutottunk a sleep(5)-ös hack-en:

break baValidate

Annyi még a trükk ezután, hogy a tényleges PAM hívást végző sfcBasicPAMAuthentication.c-ben lévő _sfcBasicAuthenticateRemote függvényt dlopen() segítségével futás közben tölti be, úgyhogy el kell oda lépkedni.

De ha eljutunk oda, akkor sajnos ott jól megy át a jelszó (pw változó), és a pam_auth_mgmt() hívás is sikeresen lefut, úgyhogy az SFCB nem hibás.

Még a PAM beállításai is jók (/etc/pam.d/sfcb)

auth       required     pam_succeed_if.so quiet_success user ingroup sfcb
auth       required     pam_localuser.so

Tehát helyi felhasználónak kell lenni és az sfcb csoportban benne kell lenni, akkor lesz a kérés sikeres.

Persze ezt az egészet felesleges volt végigjátszani, mert ha kipróbálom az elején, hogy a login esetén is beenged rossz jelszóval, akkor világos lett volna, hogy nem az SFCB a hibás:)

commented Apr 14, 2013 by anonymous  
köszi szépen! :)
...