RDot

RDot (https://rdot.org/forum/index.php)
-   Аудит Web-приложений/Web Application Security Audit (https://rdot.org/forum/forumdisplay.php?f=27)
-   -   Аудит сайта на самописной системе управления (https://rdot.org/forum/showthread.php?t=1412)

CrazyPilot 19.04.2011 10:54

Аудит сайта на самописной системе управления
 
Добрый день! Прошу проверить безопасность сайта, сделан на самописном двжике.

До этого сайт выкладывался и был взломан, но тему закрыли из-за нарушения нектороых правил (не было ссылки на этот форум).

Некоторые дыры залатал и выложил на тестовом домене cph.su . Теперь ссылка на ваш форум есть - ломайте на здоровье :) Заранее спасибо за помощь.

it's my 19.04.2011 16:09

Код:

POST: manufacturer=(0)or(select(count(*))from(pers_catalog_items)group/*test*/by(concat((select(concat_ws(0x3a,login,password))from(pers_admins)),0x00,floor(rand(0)*2))))
пасс админа: asdklfju78o4ij

хахаха, так дела не делаются ))
PHP код:

public static function StopInjections(){
            
$get_ar array_values($_GET);
            
$c_a_g count($get_ar);
            for (
$i 0;$i $c_a_g;$i++){
                if(
eregi('union(.*)select',$get_ar[$i]))
                    
self::Err404();
                if(
eregi('order(.*)by',$get_ar[$i]))
                    
self::Err404();
            }
            
            
$post_ar array_values($_POST);
            
$c_a_p count($post_ar);
            for (
$i 0;$i $c_a_p;$i++){
                if(
eregi('union(.*)select',$post_ar[$i]))
                    
self::Err404();
                if(
eregi('order(.*)by',$post_ar[$i]))
                    
self::Err404();
            }
        } 


it's my 19.04.2011 16:30

Ах да, и в админке есть кнопка "Залить шелл", находится она в загрузке документов, я бы ограничил загрузку файлов с ненужным тебе расширением :)


и еще xss
http://cph.su/index.php?module=%3Cscript%3Ealert()%3C/script%3E

/* тут был кусок кода, и мне показалось что там бага, но дальше по функциям это поправляется, тупанул ) */

ну и на последок, в админке что не переменная то скуля :)
и думаю там еще много баг, код правда в некоторых местах странный, и коменты местами жгут )))

CrazyPilot 19.04.2011 17:25

По поводу инъекций, для фронтэнда достаточно было бы все переменные в sql-запросе заключить в апострофы + addslashes?
Вот как раз у manufacturer не было апострофов :(
Идея с регулярками совсем безнадежна? Нужно ведь что-то, чтобы подстраховаться от забытых кавычек.

nobody 19.04.2011 17:34

Цитата:

Сообщение от CrazyPilot (Сообщение 16115)
По поводу инъекций, для фронтэнда достаточно было бы все переменные в sql-запросе заключить в апострофы + addslashes?

не надо в тупую жарить аддслешес на всё, нормально проверяй переменные, инты - (int) или intval. стринги - mysql_real_escape_string((string)$var)

Цитата:

Сообщение от CrazyPilot (Сообщение 16115)
Идея с регулярками совсем безнадежна? Нужно ведь что-то, чтобы подстраховаться от забытых кавычек.

Может и не безнадежна, но совершенно глупая

Цитата:

Сообщение от Jokester (Сообщение 16119)
А по простому - не суй её в условия, для проверки.

+ в запросе оператор лимит всегда берем по модулю =)

Jokester 19.04.2011 17:59

CrazyPilot
Регулярки это зло однозначно. Если не знаешь все тонкости, даже не пытайся. Обработака переменных по типу, как написал nobody.
addslashes и строковые в кавычках спасут от скулей, если нет мультибайтовых кодировок:
http://raz0r.name/vulnerabilities/sql-inekcii-svyazannye-s-multibajtovymi-kodirovkami-i-addslashes/

Твои с eregi это вообще ниочём, они срубятся %00 даже если будут грамотно всё фильтровать.
+ в новых версиях пыха их вообще поубирали, будешь переписывать движок потом?

PS Кстати intval тоже имеет свои "тонкости" . Юзать только с полным осознанием логики работы :)
А по простому - не суй её в условия, для проверки.

CrazyPilot 19.04.2011 18:13

Спасибо большое! Сейчас буду исправлять.
Еще вопрос: перед mysql_real_escape_string критично приводить переменную к строковому типу?
Когда mysql_real_escape_string($var) пропустит скуль (что нужно в $var передать)?

Jokester 19.04.2011 18:26

http://www.php.ru/manual/function.mktime/function.mysql-real-escape-string.html

внизу есть пример работы
function quote_smart

nobody 19.04.2011 18:37

ну почти правильная функция =)
is_numeric пропускает и строки в хексе (0xc0d3 например), а функция при таком раскладе в кавычки не берет - не гуд
а приводить к стрингу всёравно надо, т.к. mysql_real_escape_string плюется ворнингами если передать в него массив или объект (?var[]=)

CrazyPilot 19.04.2011 18:46

То есть, правильнее будет использовать quote_smart() для строк, и простой intval() для интов?
Хотя можно просто убрать проверку на is_numeric() - все переменные заключать в кавычки - для интов это тоже не криминал.


Часовой пояс GMT +3, время: 07:05.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot