Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Proctor a IP
Forum PHP.pl > Forum > PHP
spenalzo
Ściągnąłem sobie dodatek do Mozilli o nazwie Proctor umożliwiający ukrycie faktycznego IP i zastąpienie go wymyślonym. I faktycznie działa, z jednym wyjatkiem - gdy ktoś korzysta z poniższego skryptu:
[php:1:c074073f37]<?php
function fetchip() {
//get useful vars:
$client_ip = $_SERVER['HTTP_CLIENT_IP'];
$x_forwarded_for = $_SERVER['HTTP_X_FORWARDED_FOR'];
$remote_addr = $_SERVER['REMOTE_ADDR'];

// then the script itself
if (!empty ($client_ip) ) {
$ip_expl = explode('.',$client_ip);
$referer = explode('.',$remote_addr);
if($referer[0] != $ip_expl[0]) {
$ip=array_reverse($ip_expl);
$return=implode('.',$ip);
} else {
$return = $client_ip;
};
} elseif (!empty($x_forwarded_for) ) {
if(strstr($x_forwarded_for,',')) {
$ip_expl = explode(',',$x_forwarded_for);
$return = end($ip_expl);
} else {
$return = $x_forwarded_for;
};
} else {
$return = $remote_addr;
};
unset ($client_ip,$x_forwarded_for,$remote_addr,$ip_expl,);
return $return;
};

$ip=fetchip();
?>[/php:1:c074073f37]

Forum phpBB nie wykrywa prawdziwego adresu tylko pokazuje moje 123.123.123.123 - a ten skrypt nie? Czemu? Mocno mnie to zaciekawiło ale nie mogę rozpracować zbytnio tego skryptu - pomożecie?
Przebija sie przez proxy w3cache i proctora? W jaki sposób?
Project
Nic nowego...
polecam zajrzec do manuala biggrin.gif
http://php.planetmirror.com/manual/pl/lang....predefined.php
Jest tam calkie sporo przykladow i krotkich opisow zastosowań tych zmiennych predefinowalnych...
Poza tym to w zaden sposob nie przebija sie przez proxy ale posluguje sie jedynie zmiennymi przekazywanymi do serwra...
:idea:
spenalzo
Ja wiem, że to są zmienne serwera, ale chodzi mi o to w jaki sposób ten skrypt przechodzi przez proxy? Bo na mozillapl.org zalecają aby mimo proctora korzystać z w3cache, bo pozwala ukryć IP. A ten powyższy skrypt i tak widzi właściwy, sprawdzałem kilka razy.
FiDO
Sorki, ze odrzewam, ale przypadkiem znalazlem smile.gif

Cytat
Wszystko co spoofing robi, to dodaje jeden nagłówek X-Forwarded-For, z fałszywym IP. To, czy skrypt na serwerze da sie nabrać, czy tez nie, niestety zależy juz od skryptu.

Jest mozliwe, że nawet jeśli proctorowy spoofing wstawi fałszywe IP, to jakies wredne proxy po drodze doda jeszcze do nagłówka nasze prawdziwe IP i wtedy pupa zbita. Dokładnie tak dzieje się w przypadku podanym przez hADeSika - Proctor zadziałał (stąd obecność fałszywego IP), ale niestety połączenie szło przez proxy, które zdradziło prawdziwe IP (stąd drugie IP w X-Forwarded-For). Dlatego ciągle powtarzam, żeby nie uzywac równocześnie spoofingu i proxy, bo proxy bardzo często dopisują do X-Forwarded-For prawdziwe IP i w ten sposób spoofing traci swój efekt.

Do tego:
Cytat
Jak pisałem w artykule, Proxy Spoofing służy jedynie oszukiwaniu wyrafinowanych skryptów, które wykrywaja połączenia przez proxy

I jeszcze to, najbardziej klarowny ze znalezionych przeze mnie opisow
Cytat
Połączenie bezpośrednie: serwer dostaje jedno IP i jest to IP połączenia, czyli IP komputera z którego nawiązano połączenie.

Połączenie przez proxy: serwer dostaje dwa IP. IP połączenia i IP w nagłówku HTTP. IP połączenia to IP serwera proxy (bo to on sie łączy). IP w nagłówku to Twoje IP, przekazane przez proxy.

Połączenie przez proxy spoofing: serwer dostaje dwa IP. IP połączenia to Twoje IP. IP w nagłówku to podane przez Ciebie fałszywe IP.

Połączenie przez proxy i proxy spoofing: serwer dostaje trzy IP. IP połączenia to IP serwera proxy. W nagłówku HTTP idzie podane przez Ciebie wymyślone IP oraz Twoje IP.

Tak więc za każdym razem serwer dostaje Twoje IP, tylko w inny sposób i czasem w towarzystwie innych IP. Trick polega na tym, zeby skrypt na serwerze nie połapał sie w tym, które jest które. Ale to, który z w/w sposóbów poskutkuje zależy już od implementacji skryptu.

Wszystko to slowa autora.

Aha.. bylbym wdzieczny jakby ktos mi napisal jaka zawartosc maja naglowki (te z IP) przy opcji czwartej, czyli wlaczony i proxy i spoofing...
adwol
Cytat
Ja wiem, że to są zmienne serwera, ale chodzi mi o to w jaki sposób ten skrypt przechodzi przez proxy? Bo na mozillapl.org zalecają aby mimo proctora korzystać z w3cache, bo pozwala ukryć IP. A ten powyższy skrypt i tak widzi właściwy, sprawdzałem kilka razy.

Ten skrypt też można oszukać i to zarówno przy korzystaniu i nie korzystaniu z proxy. Wystarczy, że klient przy korzystaniu z proxy pośle nagłówek Client-IP.
W sumie to nie ma idealnej metody na pobranie prawdziwego IP klienta ponieważ zawsze można zaemulować pracę proxy.

Mnie za to dziwi co autor miał na myśli pisząc ten fragment skryptu:
[php:1:23fed75723]<?php
if($referer[0] != $ip_expl[0]) {
$ip=array_reverse($ip_expl);
$return=implode('.',$ip);
} else {
$return = $client_ip;
};
?>[/php:1:23fed75723]
Jaki sens ma porównywanie pierwszego członu REMOTE_ADDR i HTTP_CLIENT_IP i zwracanie wyniku w odwrotnej kolejności?
adwol
Cytat
Aha.. bylbym wdzieczny jakby ktos mi napisal jaka zawartosc maja naglowki (te z IP) przy opcji czwartej, czyli wlaczony i proxy i spoofing...

Skoro włączony jest proxy to adres z nagłówka IP (czyli ten z REMOTE_ADDR) to adres proxy.
xeonderator
Ściągnąłem sobie dodatek do Mozilli o nazwie Proctor umożliwiający ukrycie faktycznego IP i zastąpienie go wymyślonym. I faktycznie działa, z jednym wyjatkiem - gdy ktoś korzysta z poniższego skryptu

jak ktoś dostanie bana na te twoje ip (nawet z drugiego końca świata) to se te na forum nie wejdziesz smile.gif
orson
witam ...

jak chcecie sobie poogladac wszystki mozliwe zeczy o polaczeniu to polecam taki oto skrypt:
[php:1:686d3fc65c]<?php
<html>
<style>
td{
font-size:10pt;
font-face:verdana;
}
b{
font-weight:900;
font-size:15pt;
}
</style>
<table cellspacing='0' cellpadding='4' border='0'>
<tr>
<td width='500'>Key</td>
<td>wartość</td>
<tr>
<td colspan=2><b>$_SERVER</b></td>
</tr>
<?
$keys1 = array_keys($_SERVER);
for ($i = 0; $i < count($_SERVER); $i++){
print "
<tr>
<td>".$i." ".$keys1[$i]."</td>
<td>".$_SERVER[$keys1[$i]]."</td>
</tr>";
}
?>
<tr>
<td colspan=2><b>$_ENV</b></td>
</tr>
<?
$keys2 = array_keys($_ENV);
for ($i = 0; $i < count($_ENV); $i++){
print "
<tr>
<td>".$i." ".$keys2[$i]."</td>
<td>".$_ENV[$keys2[$i]]."</td>
</tr>";
}
?>
<tr>
<td colspan=2><b>$_COOKIE</b></td>
</tr>
<?
$keys3 = array_keys($_COOKIE);
for ($i = 0; $i < count($_COOKIE); $i++){
print "
<tr>
<td>".$i." ".$keys3[$i]."</td>
<td>".$_COOKIE[$keys3[$i]]."</td>
</tr>";
}
?>
<tr>
<td colspan=2><b>$_GET</b></td>
</tr>
<?
$keys4 = array_keys($_GET);
for ($i = 0; $i < count($_GET); $i++){
print "
<tr>
<td>".$i." ".$keys4[$i]."</td>
<td>".$_GET[$keys4[$i]]."</td>
</tr>";
}
?>
<tr>
<td colspan=2><b>$_POST</b></td>
</tr>
<?
$keys5 = array_keys($_POST);
for ($i = 0; $i < count($_POST); $i++){
print "
<tr>
<td>".$i." ".$keys5[$i]."</td>
<td>".$_POST[$keys5[$i]]."</td>
</tr>";
}
?>
<tr>
<td colspan=2><b>$_REQUEST</b></td>
</tr>
<?
$keys6 = array_keys($_REQUEST);
for ($i = 0; $i < count($_REQUEST); $i++){
print "
<tr>
<td>".$i." ".$keys6[$i]."</td>
<td>".$_REQUEST[$keys6[$i]]."</td>
</tr>";
}
?>
<tr>
<td colspan=2><b>$GLOBALS</b></td>
</tr>
<?
$keys7 = array_keys($GLOBALS);
for ($i = 0; $i < count($GLOBALS); $i++){
print "
<tr>
<td>".$i." ".$keys7[$i]."</td>
<td>".$GLOBALS[$keys7[$i]]."</td>
</tr>";
}
?>
</table>
</html>

?>[/php:1:686d3fc65c]
mozna sie dowiedziec kilku fajnygh zeczy ...
co to 4 opcji [ proxy i spoofing on] to HTTP_X_FORWARDED_FOR przyjmuje wartosc :192.168.0.1, 10.31.1.1 gdzie 1 adres to spoofing a 2 to ip mojego proxy ...
adwol
Cytat
witam ...

jak chcecie sobie poogladac wszystki mozliwe zeczy o polaczeniu to polecam taki oto skrypt:

Ten cały skrypt można chyba zawrzeć w winksmiley.jpg
[php:1:4b9c21b9cb]<?php
print_r($GLOBALS);
?>[/php:1:4b9c21b9cb]
Cytat
mozna sie dowiedziec kilku fajnygh zeczy ...
co to 4 opcji [ proxy i spoofing on] to HTTP_X_FORWARDED_FOR przyjmuje wartosc :192.168.0.1, 10.31.1.1 gdzie 1 adres to spoofing a 2 to ip mojego proxy ...

Możesz mieć przypadek, że między klientem a serwerem www są dwa (lub więcej) serwery proxy. Wtedy taka sytuacja jest normalna i nie oznacza wcale, że ktoś próbował spoofingu.
FiDO
Cytat
Cytat
Aha.. bylbym wdzieczny jakby ktos mi napisal jaka zawartosc maja naglowki (te z IP) przy opcji czwartej, czyli wlaczony i proxy i spoofing...

Skoro włączony jest proxy to adres z nagłówka IP (czyli ten z REMOTE_ADDR) to adres proxy.

To wiem, pytalem o to co jest jesli jest wlaczone i proxy i spoofing, a nie samo proxy...
orson czesciwo udzielil mi na to odpowiedz, ale cos mi sie kupy nie trzyma, bo napisal, ze w X_FORWARDED_FOR dostaje ip spoofowane i proxy, a proxy w takiej sytuacji powinno isc w REMOTE_ADDR, a w X_FOR.. powinno byc ip spoofowane i te prawdziwe, ale pewnie literowka winksmiley.jpg

Tez nie rozumiem tego "triku" z CLIENT_IP, musze sobie poszukac co go przekazuje i w jakich okolicznosciach.
Cytat
Ten cały skrypt można chyba zawrzeć w winksmiley.jpg
[php:1:47b0eed6cf]<?php
print_r($GLOBALS);
?>[/php:1:47b0eed6cf]

Jeszcze krocej :
[php:1:47b0eed6cf]<?php phpinfo(); ?>[/php:1:47b0eed6cf]
Ktos mnie przebije? winksmiley.jpg
orson
witam smile.gif

Cytat
Ktos mnie przebije?

ja !!
[php:1:c3f0c20e36]
<? phpinfo(); ?>
[/php:1:c3f0c20e36]
trzy znaki mniej ale zawsze biggrin.gif:D:D:D:D

cya
FiDO
Ejj... ale miedzy wierszami bylo napisane, ze w php.ini jest Short Tags = Off tongue.gif
kurtz
hej
Cytat
Cytat
Ktos mnie przebije?
ja !!
[php:1:1bf3220528]
<? phpinfo(); ?>
[/php:1:1bf3220528]
trzy znaki mniej ale zawsze :D:D:D:D:D
[php:1:1bf3220528]<?phpinfo()?>[/php:1:1bf3220528]Spacje, srednik zbedne ;)

Pozdrawiam
FiDO
skubany... winksmiley.jpg
spenalzo
Cytat
Jaki sens ma porównywanie pierwszego członu REMOTE_ADDR i HTTP_CLIENT_IP i zwracanie wyniku w odwrotnej kolejności?

Ja tego nie pisałem :-)
Dzięki za wyjaśnienia.
kubatron
dosyć to ciekawe lecz mało praktyczne i niedopracowane ponieważ skrypt można sprawdzić skryptem czytałem na jakiejś stronie że jeśli skrypt jest napisany to można go podejsć skryptem a takie programy które wykrywaja te skrypty a potem nakładają na nie skrypt napisany na stronie
orson
witam ...

i te skrypty napisane skryptem na stronie one ... siedza i zawijaja skrypty w sreberka questionmark.gif i wszystko jasne ...

cya
spenalzo
Cytat
dosyć to ciekawe lecz mało praktyczne i niedopracowane ponieważ skrypt można sprawdzić skryptem czytałem na jakiejś stronie że jeśli skrypt jest napisany to można go podejsć skryptem a takie programy które wykrywaja te skrypty a potem nakładają na nie skrypt napisany na stronie

Ja bym prosił po polsku, a jak masz z nim problemy to po angielsku.
kubatron
to niewidzisz co pisze napisałem że ten skrypt można obejść.napisać skrypt który go zmieni biggrin.gif biggrin.gif biggrin.gif
spenalzo
Cytat
to niewidzisz co pisze napisałem że ten skrypt można obejść.napisać skrypt który go zmieni biggrin.gif  :D  :D

Skrypt zmieni skrypt ?


Nie, żartuję - teraz już rozumiem (chyba).
orson
witam

Cytat
to niewidzisz co pisze napisałem że ten skrypt można  
obejść.napisać skrypt który go zmieni biggrin.gif  :D  :D


ale co ten skrypt zmieni questionmark.gif ip u ciebie na stronie questionmark.gif ... czy skrypt ktory napiszesz, odpalisz u siebie i wejdziesz na jakas strone i on zmieni to co odczytuje serwer questionmark.gif cos nie bardzo ... a moze to jest skrypt w php [server-side] ktory wymusza wylaczenie proctora [dodatek do mozilli] questionmark.gif jezeli tak to to jest jeszcze glupsze niz myslalem ...

cya
delorian
A ja napisałem skrypt, który potrafi obejść Proctora i to bez jakichś zbędnych zamian adresów od końca i wogóle. BTW: Ten skrypt, który jest na pierwszym poście pochodzi z php.NET i tam koleś wytłumaczył po co jest ta zamiana miejscami...

Oto skrypt wraz z opisem:

[php:1:72ea7b1b62]
// Funkcja sprawdza prawdziwy adres IP uzytkownika, oczywiscie nie jest najlepszym rozwiazaniem i moze okazac sie rownoczescnie strasznie kiepskim, ale testy pokaza
// string get_ip(void);
function get_ip() {
// dla ustawionych zmiennych globalnych w tablicy $_SERVER
if(isset($_SERVER)) {
// wsprawdzamy czy polaczyl sie przez proxy
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && (isset($_SERVER['HTTP_VIA']) || isset($_SERVER['FORWARDED']))) {
// je&para;li tak to sprawdzimy czy przypadkiem nagłowek HTTP_VIA oraz FORWARDED nie sa podrobione
$sProxy_Host_Pattern = @gethostbyaddr($_SERVER['REMOTE_ADDR']);
$sProxy_Host_Pattern = "|".$sProxy_Host_Pattern."|i";
if(preg_match($sProxy_Host_Pattern,$_SERVER['HTTP_VIA']) || preg_match($sProxy_Host_Pattern,$_SERVER['FORWARDED'])) {
// je&para;li się zgadza to znaczy ze w HTTP_X_FORWARDED_FOR znajduje sie Twój adres IP (i moze dodatkowo spoofing)
// ale najpierw sprawdzimy czy nie ma przecnikow
$aSpoofing_Test = explode(",",$_SERVER['HTTP_X_FORWARDED_FOR']);
// jesli jest tam przecinek to znaczy ze poxy server dokleil adres rzeczywisty
if(isset($aSpoofing_Test[1])) {
$sGet_IP = ltrim($aSpoofing_Test[1]); // wiec zwroc adres prawdziwy
} else {
$sGet_IP = $aSpoofing_Test[0]; // w przeciwny wypadku zwroc
} // END else
} // end if(preg
} else { // end if(isset
$sGet_IP = $_SERVER['REMOTE_ADDR'];
} // end else
} else { // end if($_SERVER
// wsprawdzamy czy polaczyl sie przez proxy
if(($http_x_forwarded_for = getenv('HTTP_X_FORWARDED_FOR')) && (($http_via = getenv('HTTP_VIA')) || ($forwarded = getenv('FORWARDED')))) {
// je&para;li tak to sprawdzimy czy przypadkiem nagłowek HTTP_VIA oraz FORWARDED nie sa podrobione
$sProxy_Host_Pattern = @gethostbyaddr(getenv('REMOTE_ADDR'));
$sProxy_Host_Pattern = "|".$sProxy_Host_Pattern."|i";
if(preg_match($sProxy_Host_Pattern,$http_via) || preg_match($sProxy_Host_Pattern,$forwarded)) {
// je&para;li się zgadza to znaczy ze w HTTP_X_FORWARDED_FOR znajduje sie Twój adres IP (i moze dodatkowo spoofing)
// ale najpierw sprawdzimy czy nie ma przecnikow
$aSpoofing_Test = explode(",",$http_x_forwarded_for);
// jesli jest tam przecinek to znaczy ze poxy server dokleil adres rzeczywisty
if(isset($aSpoofing_Test[1])) {
$sGet_IP = ltrim($aSpoofing_Test[1]); // wiec zwroc adres prawdziwy
} else {
$sGet_IP = $aSpoofing_Test[0]; // w przeciwny wypadku zwroc
} // END else
} // end if(preg
} else { // end if(isset
$sGet_IP = getenv('REMOTE_ADDR');
} // end else
} // end else
return $sGet_IP; // zwracamy wartosc IP'ka wyliczonego przez funkcje
} // end get_ip()
[/php:1:72ea7b1b62]

Kod jest oczywiście open source.

Testowany na proxy na squid'zie i mozilli z proctorem. Jeśli ktoś wie jak go obejść to prosze napisać - mi się wydaje, że stawnowi jakąś wartość, ale mogę się mylić.
adwol
Cytat
A ja napisałem skrypt, który potrafi obejść Proctora i to bez jakichś zbędnych zamian adresów od końca i wogóle.

Skrypt można w łatwy sposób oszukać. Zresztą nie da się napisać takiego, który będzie działał bezbłędnie. Zawsze można dokładnie zasymulować nagłówki w3cache'a i serwer nie ma szans na połapanie się który adres jest prawdziwy, a który nie. Jest to walka z wiatrakami więc uważam, że nie ma sensu marnować na to czasu.

Zresztą na co komu tak naprawdę wiedzieć skąd połączył się ,,rzeczywisty'' klient? Potrzebne jest tylko znać adres tego który się połączył bezpośrednio do nas, bo może to byc przydatne przy autoryzacji i ew. przy zgłaszaniu incydentów.
delorian
Cytat
Skrypt można w łatwy sposób oszukać.


Prosze o przykład. Używając oczywiście samego Proctora. Bo wtedy sobie ten skrypcik poprawie.

Cytat
Zresztą nie da się napisać takiego, który będzie działał bezbłędnie.


Ale ja nie twierdzę, że można napisać. I jestem zupełnie świadomy tego, że nawet jak by był super skrypt to i tak znajdzie się sposób na jego obejście.

Cytat
Zresztą na co komu tak naprawdę wiedzieć skąd połączył się ,,rzeczywisty'' klient? Potrzebne jest tylko znać adres tego który się połączył bezpośrednio do nas, bo może to byc przydatne przy autoryzacji i ew. przy zgłaszaniu incydentów.


A więc mały upgrade:

[php:1:d995424ba2]
return ($sGet_IP == $_SERVER['REMOTE_ADDR'] ? $sGet_IP : $sGet_IP." - ".$_SERVER['REMOTE_ADDR']); // zwracamy wartosc IP'ka wyliczonego przez funkcje oraz adres bezpośredni
[/php:1:d995424ba2]
adwol
Cytat
Prosze o przykład. Używając oczywiście samego Proctora. Bo wtedy sobie ten skrypcik poprawie.

Ok, w jego obecnej formie może i da się wykryć rzeczywisty adres, ale mi chodziło o to, że jak opublikujesz ten skrypt to ktoś podrasuje proctora, żeby oszukiwał inaczej. Ty wtedy poprawisz swój skrypt żeby i to wykrywał i tak będzie w kółko, aż w końcu proctor będzie w pełni udawał serwer w3cache i pozostanie albo poddać się albo uważać każde proxy za potencjalnego spoofera.
delorian
Jeśli ktoś podrasowywałby proctora, żeby obejść mój skrypt to by było nawet ciekawe - dowód, że skrypt jest dobry. Ale oczywiście zgadzam się z Tobą, że nie miało by to sensu, wyścig i niepotrzebna strata kreatywnego czasu.

Więcej grzechów skryptowych nie pamiętam. biggrin.gif
stal-sw
No wiec z tym skrpytem jak i moim ktorego uzywam jest taki problem ze:
- nie pokazuje mojego IP wewnetrznego (innych osoby ktore wchodza na moja stronke pobiera IP wewnetrzne zas mojego nie).

Co zrobic aby pokazalo IP moje (a takze osob ktore sa w mojej sieci) - chcialbym nadmienic ze serwer na ktorym odpalam skrypt tez jest w mojej sieci lokalnej questionmark.gifquestionmark.gif

Jeszcze jakis czas temu pokazywalo IP osob z mojej sieci jednak teraz nie pokazuje bo postawiony jest 2 serwer.

czyli wynika z tego ze chyba to wyglada tak - jak ja sie lacze ze stronka:

serwer 1
serwer 2
MOJ komputer

Jak pobrac moj IP questionmark.gif?
Ozzy
a sprawdźcie jak sobie radzi coś takiego: http://pl.maze.pl/tmp/test.php
voytar
Ozzy: udostepnisz swoj skrypt? smile.gif jako jedyny z tego topicu dziala poprawnie smile.gif
Ozzy
to nie mój nawet, ale pokazać mogę;)

[php:1:99d51fe4fe]<?php
function getClientIP() {

$ip = 0;

if (!empty($_SERVER['HTTP_CLIENT_IP']))
$ip = $_SERVER['HTTP_CLIENT_IP'];

if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ipList = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip) {
array_unshift($ipList, $ip);
$ip = 0;
}
foreach ($ipList as $v)
if (!eregi("^(192.168|172.16|10|224|240|127|0).", $v))
return $v;
}
return $ip ? $ip : $_SERVER['REMOTE_ADDR'];
}
?>[/php:1:99d51fe4fe]
v1ru5
To niech ktoś wyśle żądanie o stronę przez to https://proxify.cc i odczyta swoje ip snitch.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.