usuwanie stopki phpbb by przemo
Żaden ze znanych skryptów nie blokuje zmiany stopki ani jej usunięcia oprócz phpbb by przemo. Usunięcie stopki jest możliwe oraz jej modyfikacje.
Lecz tutaj po zmianie stopki wyświetla się komunikat i jakby tego mało wysyła email do przema… To nie jest instrukcja typu zrób to i tamto !
Jak jest wyświetlana stopka ?
Zaczynamy od tego iż stopka jest wyświetlana z pliku overall_footer.tpl za pomocą zmiennej stylu: {PAGE_LOAD_PLEASE_WAIT} (w uproszczonej stopce simple_footer.tpl usunięcie lub zmiana stopki nie powoduje wyświetlenia ostrzeżenia).
I jakakolwiek modyfikacja stopki lub usunięcie powoduje wyświetlenie ostrzeżenia.
Stopka forum została zmodyfikowana, forum nie będzie działać prawidłowo!
Ustaw prawidłowo stopkę w pliku overall_footer.tpl, musi być ona widoczna w przegladarce, nie może zawierać “sztuczek” maskujacych.Wzór: Powered by <a href="http://www.phpbb.com" target="_blank" class="copyright">phpBB</a> modified by <a href="http://www.przemo.org/phpBB2/" class="copyright" target="_blank">Przemo</a> © 2003 phpBB Group
Lecz ostrzeżenie wyświetla się tylko podczas wysyłania postu lub prywatnej wiadomości, a za to odpowiada plik posting.php lub includes/functions_post.php.
Niestety na darmo możemy szukać zmiennej stylu {PAGE_LOAD_PLEASE_WAIT} w pliku includes/page_tail.php (odpowiada ona za generowanie stopki), ale znajdziemy ją w pliku includes/page_header.php (odpowiada za generowanie headera – topu forum):
'PAGE_LOAD_PLEASE_WAIT' => append_sid('<a href="index.'.$phpEx.'?mode=tloading">' . $lang['Page_loading_wait'] . '</a>'), |
Więc szukamy funkcji append_sid, znajduje się w pliku includes/sessions.php
function append_sid($url, $non_html_amp = false, $subdir_off = false) { global $SID, $subdirectory; if ( !empty($SID) && !preg_match('#sid=#', $url) ) { $url .= ( ( strpos($url, '?') !== false ) ? ( ( $non_html_amp ) ? '&' : '&' ) : '?' ) . $SID; } if ( isset($subdirectory) && !$subdir_off ) { $url = $subdirectory . $url; } $sid1 = base64_decode('aGFzaF8x'); $sid_s = base64_decode('aGFzaF8y'); global $$sid1, $$sid_s; return (strpos($url, base64_decode('bW9kZT10bG9hZGluZw==')) !== false) ? base64_decode(base64_decode(str_replace('si', '', $$sid1))) : ((strpos($url, base64_decode('bW9kZT1lbG9hZGluZw==')) !== false) ? base64_decode(base64_decode($$sid_s)) : $url); } |
Na pierwszy rzut oka coś związanego z adresami i ID sesji… lecz base64_decode() i do tego podwójne budzi ciekawość więc sprawdźmy i zdekodujmy:
$sid1 = hash_1; $sid_s = hash_2; |
Co ciekawsze hash_1 i hash_2 to zmienne globalne (zmienne bo należy zwrócić uwagę na dwa $$ przed nazwą):
global $$sid1, $$sid_s; |
Więc tak naprawdę mamy:
global $hash_1, $hash_2; |
a te zmienne znajdują się w pliku includes/constans.php:
// Forum unique hash $hash_1 = 'VUc5M1pYSmxaQ0JpZVNBOFlTQm9jbVZtUFNKb2RIUndPaTh2ZDNkM0xuQm9jR0ppTG1OdmJTSWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlHsiTnNZWE56UFNKamIzQjVjbWxuYUhRaVBuQm9jRUpDUEM5aFBpQnRiMlJwWm1sbFpDQmllU0E4WVNCb2NtVm1QU0pvZEhSd09pOHZkM2QzTG5CeWVtVnRieTV2Y21jdmNHaHdRa0l5THlJZ1kyeGhjM005SW1OdmNIbHlhV2RvZENJZ2RHRnlaMlYwUFNKZllteGhibXNpUGxCeWVtVnRiend2WVQ0Z0ptTnZjSGs3SURJd01ETWdjR2h3UWtJZ1IzSnZkWEE9'; $hash_2 = 'UENFdExTQlFiM2RsY21Wa0lHSjVJSEJvY0VKQ0lHMXZaR2xtYVdWa0lIWXhMamtnWW5rZ2NISjZaVzF2SUNnZ2FIUjBjRG92TDNkM2R5NXdjbnBsYlc4dWIzSm5MM0JvY0VKQ01pOGdLU0F0TFQ0PQ=='; |
Następnie funkcja zwraca nam wartość ale zależną od tego co znajdzie w $url (należy najpierw pamiętać o usunięciu si w $hash_1):
return (strpos($url, 'mode=tloading') !== false) ? 'Powered by <a href="http://www.phpbb.com" target="_blank" class="copyright">phpBB</a> modified by <a href="http://www.przemo.org/phpBB2/" class="copyright" target="_blank">Przemo</a> © 2003 phpBB Group' : ((strpos($url, 'mode=eloading') !== false) ? '<!-- Powered by phpBB modified v1.9 by przemo ( http://www.przemo.org/phpBB2/ ) -->' : $url); |
Oczywiście nas interesuje to co zwróci dla mode=tloading, a zwróci stopkę z $hash_1.
To już wiemy jak jest wyświetlana stopka.
Jak jest sprawdzana poprawność stopki ?
W pliku lang_main.php znajdziemy ostrzeżenie dotyczące stopki:
$lang['footer'] = 'Stopka forum została zmodyfikowana, forum nie będzie działać prawidłowo!<br />Ustaw prawidłowo stopkę w pliku overall_footer.tpl, musi być ona widoczna w przegladarce, nie może zawierać "sztuczek" maskujacych.<br /><br />Wzór: <b>Powered by <a href="http://www.phpbb.com" target="_blank" class="copyright">phpBB</a> modified by <a href="http://www.przemo.org/phpBB2/" class="copyright" target="_blank">Przemo</a> &copy; 2003 phpBB Group</b>'; |
Skoro wiemy jak jest wyświetlana stopka i że ostrzeżenie pojawia się podczas pisania więc poszukajmy w pliku includes/functions_post.php naszej znajomej zmiennej:
$$sid1 |
Zaprowadzi nas to do funkcji correct_file() lecz zacznijmy od początku:
//code to get rid of some quick-reply-mod problems $crf = base64_decode('Y29ycmVjdF9maWxl'); |
po zdekodowaniu wywołuje funkcję correct_file:
$crf = correct_file; |
Lecz następnie jest losowana liczba z pewnego przedziału:
$cr_file = rand(4,8); |
Wiec szukamy co korzysta ze zmiennej $cr_file:
if ( $cr_file == 5 ) @$crf(false); |
Jeśli wylosuje się 5 to stopka nie zostanie sprawdzona.
Funkcja correct_file()
function correct_file($file = true) { global $board_config, $phpEx, $lang; $server_name = preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['server_name'])); $btf = base64_decode('bWFpbA=='); $script_name = preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['script_path'])); $script_name = ($script_name == '') ? $script_name. '/login.'.$phpEx : '/' . $script_name. '/login.'.$phpEx; $server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://'; $server_port = trim($board_config['server_port']); $sid1 = base64_decode('aGFzaF8x'); global $$sid1; $$sid1 = str_replace('si', '', $$sid1); $cont = get_url($server_name, $script_name, trim($board_config['server_port'])); $cont = $cont[1]; $th_ch = base64_decode(base64_decode($$sid1)); if ( @eregi('username', $cont) && @eregi('password', $cont) ) { $lmk = false; if ( !($pos = @strpos($cont, $th_ch)) || !(@strpos($$sid1, 'NJZ2RHRnlaMlYwUFNKZllteGhibXNpUGxCeWVtVnRiend2WVQ0Z')) || !(@strpos($$sid1, 'xuYUhRaVBuQm9jRUpDUEM5aFBpQnRiMlJwWm1sbFpDQmllU0E4WVNCb2NtVm1QU0pvZEhSd09pOHZkM2QzTG5CeWVtVnRieTV2Y21jdmNHaHdRa0l5TH')) ) { $lmk = true; } $first = @str_replace(' ', '', @substr($cont, $pos-20, 20)); $second = @str_replace(' ', '', @substr($cont, $pos+@strlen($th_ch)-1, 20)); if ( @strpos($first, base64_decode('IS0t')) || @strpos($first, base64_decode('PGZvbg==')) || @strpos($first, base64_decode('aGlkZQ==')) || @strpos($first, base64_decode('aGlkZGU=')) || @strpos($second, base64_decode('LS0=')) || @strpos($second, base64_decode('L2Zvbg==')) ) { $lmk = true; } if ( $lmk ) { $th_d = base64_decode(base64_decode('Wm05dmRHVnk=')); if ( @strpos($th_d, base64_decode(base64_decode('SEE2THk5M2QzY3VjSEo2WlcxdkxtOXla'))) ) exit; if ( @function_exists($btf) && $board_config['data'] < (CR_TIME - 432000) ) { @$btf(base64_decode('c3RvcGthQHByemVtby5vcmc='), base64_decode('LVNUT1BLQS0=-'), $server_protocol . $server_name . $server_port . '/' . preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['script_path'])) . "\r\n" . $board_config['board_email']); update_config('data', CR_TIME); }die($lang[$th_d]); } } return true; } |
Wiec po kolei, zmienna $btf
$btf = mail; |
(jakby nie patrzeć będzie wysyłany email)
Odniesienie do naszego wzorcu stopki:
$sid1 = hash_1; |
Potem z naszego wzoru stopki usuwane są frazy si oraz nasz wzorzez jest dwa razy dekodowany i otrzymujemy:
$th_ch = 'Powered by <a href="http://www.phpbb.com" target="_blank" class="copyright">phpBB</a> modified by <a href="http://www.przemo.org/phpBB2/" class="copyright" target="_blank">Przemo</a> © 2003 phpBB Group'; |
I co ciekawe jest pobierana treść strony logowania i jeśli znajdą sie tam dwie frazy password oraz username to tylko wtedy sprawdzana jest poprawność stopki.
Następnie sprawdzane jest czy znajduje się tam cała stopka według wzorca oraz czy wzorzec jest zgodny z porównaniem, jeśli nie to wysyłany jest email do przema i zostaje wyświetlone ostrzeżenie.
Dodatkowo sprawdzane są sztuczki maskujące (komentowanie stopki, jak i znacznik oraz hidden w CSS) takim if-em, jeśli zostaną znalezione w pobliżu stopki także wyświetlane jest ostrzeżenie i wysłany zostaje email do przema:
if ( @strpos($first, '!--') || @strpos($first, '<fon') || @strpos($first, 'hide') || @strpos($first, 'hidde') || @strpos($second, '--') || @strpos($second, '/fon') ) |
Oczywiście wysyłanie maila wygląda tak:
$th_d = footer; if ( @function_exists(mail) && $board_config['data'] < (CR_TIME - 432000) ) { @mail('stopka@przemo.org', '-STOPKA-', $server_protocol . $server_name . $server_port . '/' . preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['script_path'])) . "\r\n" . $board_config['board_email']); update_config('data', CR_TIME); } die($lang[$th_d]); |
I po wysłaniu maila wyświetlane jest ostrzeżenie:
die('footer'); |
Wszystko jest wysyłane na email……………….
Jak wyłączyć sprawdzanie stopki ?
W pliku overall_footer.tpl zmieniamy:
{PAGE_LOAD_PLEASE_WAIT} |
na:
<br><a href="http://www.phpbb.com" target="_blank" class="copyright">phpBB</a> & <a href="http://www.przemo.org/phpBB2/" target="_blank" class="copyright">Przemo</a> |
W pliku includes/functions_post.php znajdź:
$crf = base64_decode('Y29ycmVjdF9maWxl'); |
zamień na:
//$crf = base64_decode('Y29ycmVjdF9maWxl'); |
znajdź:
$cr_file = rand(4,8); |
zamień na:
//$cr_file = rand(4,8); |
znajdź:
if ( $cr_file == 5 ) @$crf(false); |
zamień na:
//if ( $cr_file == 5 ) @$crf(false); |
To wszystko, nigdzie więcej stopka nie jest sprawdzana lecz nie jestem w stanie tego zagwarantować iż jakieś maile nie są jeszcze wysyłane.
Jak usunąć stopkę phpbb by przemo – prostszy sposób
Aby usunąć stopkę wystarczy zaingerować w plik: includes/sessions.php, otwieramy go
Szukamy funkcji append_sid
function append_sid |
Następnie trochę niżej linijek:
$sid1 = base64_decode('aGFzaF8x'); $sid_s = base64_decode('aGFzaF8y'); global $$sid1, $$sid_s; return (strpos($url, base64_decode('bW9kZT10bG9hZGluZw==')) !== false) ? base64_decode(base64_decode(str_replace('si', '', $$sid1))) : ((strpos($url, base64_decode('bW9kZT1lbG9hZGluZw==')) !== false) ? base64_decode(base64_decode($$sid_s)) : $url); |
Zmieniamy je na:
return $url; |
Bardzo proste, od teraz stopka nie będzie się wyświetlała ze zmiennej {PAGE_LOAD_PLEASE_WAIT}, dlatego należy pamiętać by usunąć sprawdzanie stopki.
Najnowsze komentarze