SearchEngines.bg

Това е примерно съобщение за гост. Регистрирайте безплатен акаунт днес, за да станете потребител на SearchEngines.bg! След като влезете, ще можете да участвате в този сайт, като добавите свои собствени теми и публикации, както и да се свържете с други членове чрез вашата лична входяща кутия! Благодарим ви!

SQLI уязвимост в кода

lqlqlq

New member
В този код има SQLI уязвимост, айде да ви видиме как ще го оправите :)
PHP:
<?php 
define('IN_VALID', true);
include ('conf.php');
//$ns - номер страница 
//$br - брой страница 
//$one - първа 
//$sl - следваща 
//$pl - последна 
//$pr - предишна 
$br = 15; 
$pageNum = 1; 
if(isset($_GET['page'])) { 
$pageNum = $_GET['page']; 
} 
$redove = ($pageNum - 1) * $br; 
$result = mysql_query("SELECT * FROM `chatbox` ORDER BY id DESC LIMIT $redove, $br")or die(mysql_error()); 
while($row = mysql_fetch_array($result)) { 
$id = $row['id']; 
$nick = $row['nick']; 
$message = $row['message']; 
$date = date('Y-m-d');
echo '<table border="0" style="width: 100%" class="backbox"><tr><td><b><img src="chat/chat.png" alt="" /> [' . $row[2] . ']</b> <a href="forum/member/'.$nick.'" title="виж профила на '.$nick.'">' . $nick . '</a>: ' . $message . '</td></tr></table>'; 
} 
$query = mysql_query("SELECT COUNT(id) AS numrows FROM chatbox") or die(mysql_error()); 
$row = mysql_fetch_array($query, MYSQL_ASSOC); 
$numrows = $row['numrows']; 
$maxPage = ceil($numrows/$br); 
$ns = 'Страници: '; 
for($page = 1; $page <= $maxPage; $page++) { 
if ($page == $pageNum) { 
$ns .= " <a class=\"typ1noh\" style=\"color: #ffffff\">$page</a> "; 
} 
else { 
$ns .= "<a class=\"typ1\" href=\"?a=ranking&page=$page\">$page</a> "; 
}} 
if ($pageNum > 1) { 
$page = $pageNum - 1; 
$pr = " <a href=\"?a=ranking&page=$page\"></a> "; 
$one = " <a href=\"?a=ranking&page=1\"></a> "; 
} 
else { 
$pr = ' '; 
$one = ' '; 
} 
if ($pageNum < $maxPage) { 
$page = $pageNum + 1; 
$sl = (" <a href=\"?a=ranking&page=$page\"></a> "); 
$pl = (" <a href=\"?a=ranking&page=$maxPage\"></a> "); 
} 
else { 
$sl = ''; 
$pl = ''; 
} 
echo $one . $pr . $ns . $sl . $pl; 
?>
 
Re: SQLI уязвимост в кода

Хайде де, дай предложение не се стискай :)
allmessages.php?a=ranking&page='2
Предпочитам направо кода да ми се даде готов :)
 
Re: SQLI уязвимост в кода

Проблемът ти е в $_GET['page']. През така зададената променлива могат да се осъществят MySQL injection атаки, за да избегнеш това трябва да използваш или addslashes или mysql_real_escape_string функцията.

$pageNum = mysql_real_escape_string($_GET['page']);

Ето и малко линкове на тази тема:
http://php.net/manual/en/function.mysql-real-escape-string.php
http://www.php.net/manual/en/function.addslashes.php
http://stackoverflow.com/questions/4621215/mysql-real-escape-string
 
Re: SQLI уязвимост в кода

след като редактирах:
$pageNum = $_GET['page']; на
$pageNum = mysql_real_escape_string($_GET['page']);
Грешката остана, това нормално ли е ? Да разбирам ли, въпреки, че я има всичко е ОК ?

PP:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-15, 15' at line 1
 
Последно редактирано:
Re: SQLI уязвимост в кода

разбира се че ще ти даде грешка, прочети документацията
най-тъпия начин да си "оправиш" проблема по този начин е
... id DESC LIMIT '$redove', '$br'")or ....

.....
Предпочитам направо кода да ми се даде готов :)

нямаш грижи, във форума има толкова много хора че сигурно и за 20лв ще намериш някой да ти свърши такава работата
 
Re: SQLI уязвимост в кода

Айде и аз да се изкажа неподготвен и да кажа, че конкретно SQL нищо уязвимо не виждам. Най-много някой да изкара повече редове от таблицата chatbox, но не вярвам да е нещо съществено.

За да си 100% спокоен може да направиш:
Код:
$pageNum = (int)$_GET['page'];

или по-старото
Код:
$pageNum = intval($_GET['page']);

но това нито ще помогне нито ще навреди.
 
Re: SQLI уязвимост в кода

Никакви SQL уязвимости няма в кода. Просто има слаба обработка на входящи параметри, което ще доведе до грешки при изпълнението, което не е SQL инжекция.
 
Re: SQLI уязвимост в кода

Първо бих използвал Prepared Statement и второ, не бих връщал всяка грешка да се вижда каква е от всеки.

Този начин за връзка с MySQL е много стар и скоро ще отпада. Има много по-съвременни и бързи начини, като MySQLI и PDO класовете.
 
Re: SQLI уязвимост в кода

Ако сървъра е настроен да не показва грешките нищо няма да изпише. Всичко е до настройки. Излишно е според мен Prepared Statement (не че не е правилно), но тези стейтменти се ползват по-скоро за по-бързо вкарване на данни в базата отколкото за pagination.
 
Re: SQLI уязвимост в кода

след като редактирах:
$pageNum = $_GET['page']; на
$pageNum = mysql_real_escape_string($_GET['page']);
Грешката остана, това нормално ли е ? Да разбирам ли, въпреки, че я има всичко е ОК ?

PP:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-15, 15' at line 1
LIMIT не търпи отрицателни параметри затова ти дава грешка.
За да не се получава страница по-малка от 1 аз бих направил следното
Код:
$pageNum = (int)$_GET['page'];
$pageNum = ($pageNum)?$pageNum:1;
тоест ако паръметърът за страница не е дефиниран или не е число, по подаразбиране страницата ти да е 1.

Поздрави.
 
Re: SQLI уязвимост в кода

Братлета радвам се, че помагате, но преди няколко дни заради тази работа ми "дефейснаха" сайта, промениха ми индекса и качиха шел, е шела го изтрих.
Дори ми казаха, че е там проблема в "странцирането на чата".
И ми дадоха линка, който съм посочил вече.
Това е нов метод за сваляне на сайтове, много сайтове са хакнати за малко дни (нов е защото момчето ми каза, че преди няколко седмици са научили за него с екипа му) - а те се занимават само с това, казват се cwi-team (cwi-team.com).
Аз не съм кой знае какъв разбирач, но му имам доверие, той ми каза, че няма намерение да трие нищо, дори няма да ме закача повече, бил колекционер на "системи". Зад гърба му са дори сайта на Адреа и на един министър (който вече не е такъв, забравих му името).
Та, незнам...
Най-накрая какво да ползвам от всичките ви предложения ?

LIMIT не търпи отрицателни параметри затова ти дава грешка.
За да не се получава страница по-малка от 1 аз бих направил следното
Код:
$pageNum = (int)$_GET['page'];
$pageNum = ($pageNum)?$pageNum:1;
тоест ако паръметърът за страница не е дефиниран или не е число, по подаразбиране страницата ти да е 1.

Поздрави.

Да разбирам ли, че този метамод е защитен ? С него нямам проблеми и грешката не се показва.

PP: http://rio-targovishte.com/page.php?id='5 - ето, казаха ми, че им знаят и паролите и всичко
http://www.spinea.sk/page.php?id='19 - име за вход Administrator парола spinea - това личо той ми го каза...
Не го казвам, за да ги рекламирам, ако им напишете името в гугъл ще ви излязат стотици хакнати сайтове от тях, казвам го защото тези грешки ги има в много сайтове и трябва да се оправят.
 
Последно редактирано:
Re: SQLI уязвимост в кода

Пич, някой те прави на балама...

1. Такъв сайт на хакерите, дето си го писал, няма

2. Всичките примери, дето си ги дал, са недобре обработени параметри, които водят до синтактична грешка, а не до дефейс на сайта.

3. С горните методи можеш да избегнеш синтактичната грешка

4. Най-вероятно въпросният "хакер" е някой 13-15 годишно пишлеме, което някой му е подшушнал, че като сложиш един апостроф пред стойността на числов параметър, и се показва синтактична грешка, ако не е предвидена дуракоустойчивост, и праща подобни глупости насам-натам, белким някой се съгласи да му плати нещо.

5. Смени си абсолютно всички пароли на хостовете с дълги и сложни, а също и си провери компа дали няма някой кийлогер или троянец, който да им е дал паролите ти
 
Последно редактирано:
Re: SQLI уязвимост в кода

1.Сайта им от онзи ден е спрян (цитирайки го "временна почивка"), може някой да го е чувал, въпросния се казва Necrosis - доколкото ми е известно е бил и в PirateSky Crew
4.Факт, е че сайта беше дефейснат, никъде не ползвам паролите си от сайта (Абсолютно никъде) - беше сменен индекса и беше качен style1.php
Каза ми, че ми "имал всичко"
5.Въпросния хакер, каза, че е на 18.
Естествено може да се бъзикат с мен, но е факт, че сайта ми увисна с една дума и има някъде дупка за която аз незнам, въпреки, че ползва интеграция със форума и почти никъде не се ползват sql заявки, позлвам големи модули, но те са готови за публичо сваляне и ги ползват хиляди, надали проблемите са там.
Всички config-и са с права 644, останалата директория с 755. Използвам хостинг от icn.bg и домейн от superhosting.
Под линукс съм, нямам никакъв софтуер който може да докладва на външно лице.
В интернет съм с последна версия на Google Chromium.

PP: никъде по базата нямам паролите.
 
Последно редактирано:
Re: SQLI уязвимост в кода

С filezilla влизам, както казах, нямам такъв софтуер, тъй като съм на линукс, дори wine нямам. Просто си сърфирам в интернет най-спокойно.
 

Горе