Krótko i na temat czyli wtykanie błędów i bugów(!), pomijam jednak takie duperele jak niepoprawne ciapkowanie czy dublowanie zmiennych...
Pod odstrzał leci wersja 1.13 by Meares bo widzę że to najnowsza z dostępnych wersji race.
Czerwone == Krytyczne
admin.php:
Kod php:
if ($pokaz == dod_kas) {
+
if ($step == dodana) {
+
if ($pokaz == zab_kas) {
+
itd...
Co to jest ?! Register_globals ?! Tego się w dzisiejszych czasach nie używa, ponadto jest NIEBEZPIECZNE(!)
No i nie wspomnę że się odwołujemy do... stałych (sic!)
Zastanawiam się czy to w ogóle działa....
Kod php:
$dod_kas = str_replace("--","", $dod_kas);
To za MA?O by filtrować dane (nawet jak to jest panel ADMINA), najlepiej i najprościej to "piłować" wartości cyfrowe przez ctype_digit...
O dziwo, bo ostatni if:
Kod php:
if($_GET['pokaz'] == "graczy"){
Jest poprawnie napisany.............
bank.php:
Kod php:
if($_POST['wloz'] < 0){
$kara = mysql_query("UPDATE users SET kasa=0 WHERE user='$user' ");
echo "Wykorzystywanie błędów w kodzie jest zabronione. Za karę musisz zapłącić tyle kasy ile masz obecnie.";
}
Bez komentarza... + "zapłącić"
$_POST['wloz'] - brak sprawdzania D?UGO??CI ciągu, a przy bardzo długich lubi to świrować w postaci nieprawidłowych przekształceń czy przeliczeń (takowy przypadek był w vallheru...)
Kod php:
$jest = mysql_fetch_array(mysql_query("SELECT bank FROM users WHERE user='$user' "));
$jest2 = $jest[0];
$wloz = $_POST['wloz'];
$wloz2 = $wloz + $jest2;
$wloz3 = mysql_query("UPDATE users SET bank='$wloz2' WHERE user='$user' ");
Nie wie się że SQL liczyć potrafi...? Ponadto $_POST['wloz'] to int więc ciapkować nie trzeba...
Kod php:
$wloz3 = mysql_query("UPDATE users SET bank=bank+$_POST['wloz'] WHERE user='$user' ");
Oczywiście w przypadku "wyjmij" niemal to samo...
car.php do car20.php
Trudno to złączyć w jedno i skorzystać z $_GET ? o0
gora.php
Kod php:
@session_start();
Po co tam @ ? Przecież mechanizm sesji tak czy siak wystartować MUSIMY....
Kod php:
$_SESSION['komunikat'] = "Do poprawnego działania skryptu wymagana jest przeglądarka Mozilla Firefox!";
Znów bez komentarza...
hotel.php
Kod php:
$kasa4 = mysql_query("UPDATE users SET kasa='$kasa3' WHERE user='$user' ");
$zmeczenie = mysql_query("UPDATE users SET zmeczenie=0 WHERE user='$user' ");
Dwa update'y do tej samej tabeli i z tą samą krauzulą where...
izba.php:
Kod php:
$kasa3 = mysql_query("UPDATE users SET kasa='$kasa2' WHERE user='$user' ");
$kasa4 = mysql_query("UPDATE users SET promile=0 ");
Ciekawe to ostatnie query które ustawia WSZYSTKIM graczom promile na 0... chyba że ktoś zjadł tam WHERE to wtedy będzie przypadek jak wyżej.
karczma.php:
Kod php:
if(isSet($_POST['tresc']) && isSet($_POST['wyslij']) && !empty($_POST['tresc'])){
$tekst = $_POST['tresc'];
mysql_query("INSERT INTO karczma SET user='$user', text='$tekst'");
header("Location: karczma.php");
}
BRAK FILTROWANIA DANYCH $_POST['tresc'], SQL injection na pełnej lini(!!!)
kontakt.php:
Sztywne ustawienie emaila, można zapomnieć o zmianie + możliwe zaSPAMienie...
install.php:
Kod php:
@mysql_query('SET NAMES latin2');
@mysql_query('SET collation_connection = latin2_general_ci');
@mysql_query('SET CHARACTER SET latin2');
@mysql_query('set character_set_connection=latin2');
@mysql_query('set character_set_client=latin2');
@mysql_query('set character_set_database=latin2');
@mysql_query('set character_set_results=latin2');
@mysql_query('set character_set_server=latin2');
@mysql_query('set collation_database=latin2_general_ci');
@mysql_query('set collation_server=latin2_general_ci');
samo
mysql_query('SET NAMES latin2');
jest wystarczające bo to Sź zapytania do bazy danych(!)
login.php:
BRAK filtrowania $_POST['user'], sytuacja podobna co w karczma.php - Krytyczne SQL injection
nowy_user.php:
To samo co wyżej - BRAK filtrowania danych z $_POST["user"], $_POST["email"], $_POST["imie"], $_POST["miasto"], $_POST["gg"]
Szczególnie $_POST["user"] bo jak trafi coś "spreparowanego" bo bazy to potem mogą być "atakowane" wszelanie zapytania które opierają się na danej wyciągniętej z pola user(!)
pmenu.php:
Kod php:
Witaj: <?php echo $_SESSION['zalogowany'] ?><br>
Kasa: <?php echo str_replace(".", ",", $row[0]) ?> zł <?php echo $kup ?><br>
Zmęczenie: <?php echo substr($zmeczenie[0],0,-3) ?> %<br>
<?php echo str_replace(".", ",", $promile) ?><br>
<?php echo "<img src=\"http://graj.sex.pl/race" . $miniaturka[0] . "\">"; ?><br><br>
po co tyle razy wchodzić i wychodzić zphp ? Marnowanie czasu serwera, a można to wszystko władować w jedno echo...
polskie_znaki.php: - WTF ?!
profil.php:
BRAK filtrowania $_GET['user'] - SQL inj.
pvp.php:
Cała armia zmiennych...
rejestracja.php:
PSEUDO-filtrowanie przez JS, BRAK ze strony serwera, zagrożenie - wspomniane przy nowy_user.php...
samochodzy.php:
?OJEZU........
silnik.php:
Kod php:
$kupil = mysql_query("UPDATE users SET silnik='$silniklv' WHERE user='$user'");
$new_kasa = $all[0] - $silnik[3];
$update = mysql_query("UPDATE users SET kasa='$new_kasa', vmax='$vmax4', do100='$do1004' WHERE user='$user' ");
i to też można połączyć...
stacja_paliw.php:
Kod php:
$kaska = mysql_fetch_array(mysql_query("SELECT kasa FROM users WHERE user='$user'"));
Po co to walimy jak już mamy forse wyciągniętą wcześniej? ($kasa)
team.php:
Kod php:
$team = mysql_fetch_array(mysql_query("SELECT team FROM users WHERE user='$user'"));
$kasa = mysql_fetch_array(mysql_query("SELECT kasa FROM users WHERE user='$user'"));
kolejny przypadek gdzie można złączyć w jedno...
Kod php:
$id = addslashes($_GET['id']);
$team_inf2 = mysql_fetch_assoc(mysql_query("SELECT * FROM teams WHERE id='".$id."'"));
Niedostateczne $_GET['id'] filtrowanie - SQL inj
Kod php:
$team_name = addslashes($_POST['team_name']);
$team_tag = addslashes($_POST['team_tag']);
$num1 = mysql_num_rows(mysql_query("SELECT id FROM teams WHERE name='".$team_name."'"));
if ($num1 == 0) {
$num2 = mysql_num_rows(mysql_query("SELECT id FROM teams WHERE tag='".$team_tag."'"));
if ($num2 == 0) {
mysql_query("INSERT INTO teams (name, tag, chief) VALUES ('$team_name', '$team_tag', '$user')") or die (mysql_error());
Kolejne niedostateczne filtrowanie....
waarsztat.php:
Wystarczył by jakiś wzór, lub tablica i skróciło by się ten kod o 75%...
work.php:
Kod php:
$work = mysql_fetch_array(mysql_query("SELECT pracuje_do FROM users WHERE user='$user'"));
$czas = mktime();
$godzin = mysql_fetch_array(mysql_query("SELECT godzin FROM users WHERE user='$user'"));
Znów to samo, dwa zapytania do tej samej tabeli z tym samym WHERE...
Ponadto brak sprawdzania długości $_POST['time'].
wyscig.php:
Kod php:
$all = mysql_fetch_row(mysql_query("SELECT kasa, vmax, bak, respekt, promile, zmeczenie, do100 FROM users WHERE user='$user'"));
$czas_ostatni = mysql_fetch_array(mysql_query("SELECT ostatni_wyscig FROM users WHERE user='$user'"));
Kolejny raz to samo, dwa zapytania do tej samej tabeli z tym samym WHERE... (od tej pory będę kopiować tę informację bo szkoda pisać...)
Niedostateczne $_POST['race'] filtrowanie - SQL inj
yes.php:
Kolejny raz to samo, dwa zapytania do tej samej tabeli z tym samym WHERE, ale tym razem dwukrotnie (SELECT, a potem UPDATE)
zmiana_avatar.php:
BRAK sprawdzania "prawdziwości" obrazka, oraz wielkości, ktoś może wrzucić jakiegoś "grzmota" i potem to zeżre ogromne ilosci transferu...
zmiana_email.php + zmiana_gg.php + zmiana_imie.php + zmiana_miasto.php
BRAK filtrowania $_POST['new_email'], $_POST['new_gg'], $_POST['new_imie'] i $_POST['new_miasto'] - SQL inj...
W folderach gdzie są grafiki są ukryte i systemowe pliki Thumbs.db (bazy miniatur tworzone przez systemy Windows XP i wyższe)
Folder team:
admin.php:
Kod php:
$option = addslashes($_GET['option']);
include("admin/".$option.".php");
addslashes na coś co leci do includa ?!
http://us3.php.net/manual/en/function.addslashes.php
pisze jak byk - "Returns a string with backslashes before characters that need to be quoted in database queries etc"
chat.php:
identyczna sytuacja co przy karczma.php(!)
donate.php:
Kod php:
$cash = addslashes($_POST['cash']);
$new_cash = $team_inf1['cash'] + $cash;
$p = mysql_fetch_array(mysql_query("SELECT kasa FROM users WHERE user='".$user."'"));
if ($cash > 0) {
if ($p[0] >= $cash) {
$new_kasa = $p[0] - $cash;
mysql_query("UPDATE teams SET cash='".$new_cash."' WHERE id='".$team_inf1['id']."'") or die (mysql_error());
mysql_query("UPDATE users SET kasa='".$new_kasa."' WHERE user='".$user."'") or die (mysql_error());
echo "Kasa została wpłacona.";
}
} else {
echo "Nic z tego żartownisiu!";
}
Znów TYLKO addslashes i to w dodatku na wartość cyfrową. Ponadto BRAK sprawdzania typu, czy jest dodatnia czy ujemna oraz długość + SQL inj
new_member.php:
SQL inj na $_POST['podanie']
nextlevel.php:
Tu można zastosować jakiś wzór. ponadto jakaś dziwnie MA?A wartość $nextlevel dla $team2['level'] == 9...
przelicz.php:
Do optymalizacji bo razi w ocka(!)
quit.php:
Jasne!
team='0'
A ciapy na "zero" można sobie podarować...
tvt.php:
Zbędne zmienne, liczenie można zwalić na bazę...
Folder team/admin:
applications.php:
Znów filtrowanie vs SQL inj na $_GET['p'], można podać NIE swoją nazwe usera...
change_team_description.php + change_team_name.php + change_team_tag.php:
SQL inj na $_POST['new_desc'], $_POST['new_name'], $_POST['new_tag']
Ponadto te pliki można było by zunifikować...
image.php:
SQL inj na $_POST['img']
kick.php:
SQL inj na $_POST['user']
A teraz życzę kupę nerwów i niestrawnosci będąc w świadomości jak dużo błędów i bugów jest w race ^^
Zakładki