usuwanie stopki phpbb by przemo

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> &copy; 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 ) ? '&' : '&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 &lt;a href=&quot;http://www.phpbb.com&quot; target=&quot;_blank&quot; class=&quot;copyright&quot;&gt;phpBB&lt;/a&gt; modified by &lt;a href=&quot;http://www.przemo.org/phpBB2/&quot; class=&quot;copyright&quot; target=&quot;_blank&quot;&gt;Przemo&lt;/a&gt; &amp;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> &amp; <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.

Zapomniałem napisać ale dzięki temu (wyłączeniu sprawdzania stopki) zwiększa się szybkość wysyłania postów!

24 Comments

  1. To skandal ze przemo stosuje takie metody, radze upowszechnić ten sposób, jeżeli ktoś zmusza skrypt do wysyłania wiadomości e-mail bez wiedzy użytkownika łamie licencje GNU.

  2. tosiek

    27.09.2009 at 20:34

    Ja nie znam treści licencji, żadnej ( : i mi z tym dobrze, mam każdą w dupie, wolę czytać nawet najbardziej szmatławe książki…

  3. I po co te wypociny? Wystarczy jedna linijka w CSS’ie i stopki nie widac.
    Niedouczenie ogarnelo internet.

  4. tosiek

    28.09.2009 at 06:49

    CSS nie usuwa stopki, a ukrywanie, bądź kolor tekstu zgodnego z tłem algorytm google tępi.

  5. Czyli rozumiem, że z twoich modyfikacji zamieszczonych na przemo.org też mogę wykasować stopki? Bo też nie czytam licencji i mam je w dupie.

  6. tosiek

    09.10.2009 at 20:25

    Robisz co chcesz, masz wolną wolę, jesteś wolnym człowiekiem. Przynajmniej teoretycznie i konstytucyjnie… Gorzej jeśli Cię kiedyś system dorwie…

  7. Ciekawe kiedy załatają dziurę w załącznikach.

  8. “Przemo pisze:
    27-09-2009 o 23:33

    I po co te wypociny? Wystarczy jedna linijka w CSS’ie i stopki nie widac.
    Niedouczenie ogarnelo internet.”

    Przecież tosiek napisał, że nie chodzi tylko o ukrycie stopki, a wyłączenie funkcji sprawdzania przyspiesza wysyłanie posta i w pełni się z nim zgadzam. Nie pisz bzdur!

  9. Funckcję correct_file() można za komentować? bo tam jest tylko funkcja wysłania emaila.

  10. tosiek

    26.03.2011 at 07:13

    tartut możesz usunąć całą funkcję correct_file(), tylko pamiętaj też o reszcie jak na przykład linijka wywołująca tę funkcję.

  11. Tosiek, gogole tepi ukrywanie elementów na stronie? Czy Ty sie dobrze czujesz? To napisz na forum jQuery żeby usuneli metode hide() oraz toggle() bo to google tępi.
    LOL

    • tosiek

      08.04.2011 at 12:00

      Zacznij odróżniać ukrywanie poprzez CSS a javascript, nikt tutaj nie wspominał o JS.

  12. Te funkcje służą do budowania menu/wszelkich zamulających efektów i animacji JS. Celowe ukrycie linków jak najbardziej jest tępione przez google

  13. slawek.ino

    06.05.2011 at 14:38

    Aby usunąć stopkę wystarczy usunąć dany fragment kodu
    {CLICK_HERE_TO_VIEW}{PAGE_LOAD_PLEASE_WAIT}
    w pliku /templates/subSilver/overall_footer.tpl

    Oczywiście nie polecam takiego kroku gdyż jest to naruszenie praw autorskich i każdy z nas chyba wie czy to grozi : )

    • tosiek

      06.05.2011 at 15:14

      slawek.ino zgodziłbym się z tobą gdyby nie licencja phpBB, która zezwala na usunięcie stopki:

      /***************************************************************************
       *   This program is free software; you can redistribute it and/or modify
       *   it under the terms of the GNU General Public License as published by
       *   the Free Software Foundation; either version 2 of the License, or
       *   (at your option) any later version.
       ***************************************************************************/

      A poza tym opisałem już ten sposób usuwania wyświetlania stopki ale pamiętaj, że nadal działa sprawdzanie.

  14. Wie ktoś co robi Przemo gdy dojdzie do niego taki mail, że ktoś usunął stopkę?? Bo zrobiłem tak jak jest to powyżej opisane, ale wcześniej trochę namieszałem w tym overall_footer.tpl i chyba wysłało maila. Teraz mam problem tego typu, że zniknęło wejście do PA :) hehe

    • tosiek

      17.07.2011 at 16:54

      Nic zrobić nie może. A co do PA to po prostu usunąłeś nie to co trzeba ;) O ile się nie mylę to przywróć: {CLICK_HERE_TO_VIEW}

  15. Ten sposób mi nie pomaga. Usunąłem co prawda stopkę i zablokowałem tak jak trzeba ale nadal wyskakuje ten błąd.

    • tosiek

      12.08.2011 at 10:13

      Widocznie nie wyłączyłeś sprawdzania stopki i nic dziwnego, że Ci po usunięciu stopki wyświetla Ci się komunikat o usunięciu.

      Chyba, że przemo zmienił sposób sprawdzania :)

  16. Po tym dziwnym patencie kompletnie straciłem zaufanie do tego skryptu. Skoro bez wiedzy użytkownika wysyła jakieś maile to bym się nie zdziwił gdyby był gdzieś ukryty jakiś backdoor.

    • Jak bez wiedzy? W folderze /docs jest plik readme.html i tam jest wyraźnie napisane :
      “Skryptu możemy używać za darmo i bez ograniczeń za wyjątkiem ograniczenia nałożonego na jego stopkę, której nie można usuwać oraz zmieniać. Skrypt wyposażony jest w funkcje kontrolujące i gdy zostanie ona zmieniona lub usunięta, pojawią się problemy w działaniu forum. “

    • tosiek

      20.12.2011 at 22:47

      Niezgodne z licencją, stopkę możemy usuwać i zmieniać :)

  17. Usunąłem stopkę właśnie dlatego że jest nałożona blokada. Nie lubię, gdy ktoś mnie do czegoś zmusza.

  18. No i cała opisana stopka, fajnie wiedzieć takie rzeczy.

Dodaj komentarz