Nmap nuk e dërgon gjithmonë paketën që mendoni se keni kërkuar. Kur soketat e papërpunuara nuk janë të disponueshme, ai zëvendëson skanimin standard SYN me një skanim TCP connect, kështu që një ekzekutim si përdorues normal dhe një ekzekutim nën sudo mund t'u përgjigjen pyetjeve të ndryshme për të njëjtin port. Rezultatet duken si problem lejesh, dhe zakonisht janë një ndryshim metode. Ta bësh metodën eksplicite është mënyra e vetme për të krahasuar të dy ekzekutimet.

Dy sonda, një port, shtigje kodi të ndryshme

Një skanim SYN e ndërton vetë kokën TCP, e dërgon nga një soket i papërpunuar dhe e lexon përgjigjen nga rrjeti para se stiva TCP e kernelit të regjistrojë ndonjëherë një lidhje të përfunduar. Një skanim connect i kërkon sistemit operativ të hapë një soket të zakonshëm dhe raporton atë që kthen connect(). Të dyja mund ta quajnë një port të hapur, por vetëm njëra lë një përpjekje gjysmë të hapur dhe vetëm njëra i nënshtrohet politikës në nivel soketi që lidhet me procesin dërgues.

Shtegu i papërpunuar kërkon CAP_NET_RAW, prandaj skanimi standard përkeqësohet në heshtje kur kjo aftësi mungon. Referenca e teknikave të skanimit e vetë Nmap dokumenton zëvendësimin: skanimi connect është alternativa sepse nuk kërkon fare privilegje të veçanta. Ndërrimi ndodh pa paralajmërim në shumicën e ekzekutimeve, dhe pikërisht kjo e bën kaq të lehtë për t'u lexuar gabimisht. Sapo ta dini se alternativa ekziston, “e hapur si root, e mbyllur si përdorues” nuk tingëllon më si gabim lejeje dhe fillon të tingëllojë si dy matje të ndryshme.

Çfarë ndryshon sudo në të vërtetë në skanim

Rritja e privilegjeve rikthen shtegun e soketit të papërpunuar, dhe kjo ndryshon më shumë se vendimi. Zgjedhja e portit burimor, kohëzgjatja e paketave, sjellja e ridërgimit dhe mënyra e klasifikimit të një përgjigjeje të filtruar vijnë të gjitha nga kod i ndryshëm. Një pajisje ndërmjetëse që kufizon ritmin e SYN i trajton të dy ekzekutimet në mënyrë të pabarabartë edhe kur hosti i destinacionit është identik.

Edhe regjistrimi në anën e destinacionit ndryshon. Një shtrëngim duarsh i përfunduar është i dukshëm për shërbimin dhe për çdo kontabilitet soketash, ndërsa një sondë gjysmë e hapur e rinisur shpesh nuk është. Nëse krahason ekzekutime kundrejt një hosti, regjistrat e të cilit i lexoni gjithashtu, një pjesë e ndryshimit që shihni është vetë vëzhgimi.

Mbajeni metodën konstante në të dy ekzekutimet

Impononi të njëjtën teknikë në të dy thirrjet dhe krahasimi fillon të ketë kuptim. Flamuri -sT kërkon shprehimisht skanimin connect, -Pn heq zbulimin e hosteve, -n heq zgjidhjen e emrave, dhe një -p i vetëm heq ndryshimet në listën e porteve.

nmap -sT -Pn -n -p 8443 198.51.100.77
sudo nmap -sT -Pn -n -p 8443 198.51.100.77

Zëvendësoni adresën dhe portin me një host që ju lejohet të testoni; diapazoni dokumentar më sipër është shembull, jo objektiv. Nëse dy ekzekutimet tani përputhen, ndryshimi fillestar vinte nga metoda e skanimit. Nëse ende nuk përputhen, diçka tjetër po e klasifikon trafikun, dhe seksioni tjetër është vendi ku duhet parë.

Konteksti i llogarisë nuk është vetëm një flamur privilegjesh

Një vendosje VPN mund t'i klasifikojë paketat sipas UID, sipas cgroup ose sipas një rregulli të lidhur me procesin që hapi soketin. Atëherë trafiku i root dhe ai i përdoruesit dalin përmes tabelave të ndryshme të rrugëtimit ose përplasen me grupe rregullash të ndryshme, dhe asnjë disiplinë e metodës së skanimit nuk i pajton.

Ekzaminoni politikën, jo privilegjin. Në Linux, nftables e shpreh këtë me meta skuid dhe iptables me përputhjen e pronarit, dhe secili prej tyre mund të dërgojë një UID të vetëm në një tunel, ndërsa tjetri vazhdon të përdorë rrugën fizike standarde.

sudo nft list ruleset | grep -n skuid
sudo iptables-save | grep -n uid-owner
ip rule show
ip route get 198.51.100.77

Konfirmoni sondën përpara se të krahasoni rezultatet

Përpara se të nxirrni përfundime, provoni cila sondë u ekzekutua. Nmap e emërton teknikën në daljen e vet, dhe --reason shton provën pas çdo gjendjeje, dhe pikërisht ai pjesë ju thotë nëse një shtrëngim duarsh përfundoi vërtet.

nmap --reason -sT -Pn -n -p 8443 198.51.100.77
sudo nmap --reason -sS -Pn -n -p 8443 198.51.100.77
getcap "$(command -v nmap)"
capsh --print | grep -i net_raw

Dy ekzekutime që raportojnë të njëjtën gjendje për arsye të ndryshme nuk janë kontradiktë, dhe dy ekzekutime që raportojnë gjendje të ndryshme për të njëjtën arsye tregojnë rrugëtimin ose politikën, jo skanimin. Mbajini identike destinacionin, portin, hapësirën e emrave dhe kohën, pastaj ndryshoni një variabël në një herë. Ekzekutimi i shërbimit si root nuk është riparimi i një mospërputhjeje politike; riparimi është të shprehësh politikën e synuar përmes pronarit të shërbimit.

Artikuj të ngjashëm