download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

HackQuiz #1 - Dog

Автор
Съобщение
programings
Чет, 20.06.13, 20:59
Хехехе.
Идеята беше някой да се сети без да го декодира. Мамиш!
С LiveHTTPHeaders също става просто да прихванеш заявката и да смениш User-Agent-а, след което да Replay-неш.

Нищо, и така става.

Да, това с хедъра ми хрумна преди няколко дни докато четох за $_SERVER параметрите на PHP, та си викам защо да не се направи така, че щом PHP взима информация за user-agent-а, то защо да не се направи някаква защита с парола на този принцип. Определено много малко хора ще се сетят, а и като не знаят паролата - още по-малко.
Определено може да се използва за защита на уеб страници от случайно преглеждане от хора, които не искаме да виждат нещо в сайта.

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

редактиран от programings на 20.06.13 21:00
phrozencrew
Чет, 20.06.13, 21:09
Само една препоръка. Ако решиш да ползваш подобен род защита за нещо сериозно, ЗАДЪЛЖИТЕЛНО не дръж паролата в явен вид! Прави проверката за съвпадение с sha1, md5 или друга хеш-сума.
programings
Чет, 20.06.13, 21:25
Да, естествено.
Идеята наистина и според мен е добра, и я добавих като user note (коментарите в долната част) на $_SERVER страницата в php.net документацията за да е полезна за потребителите.
Чакам да одобрят поста.
редактиран от programings на 20.06.13 21:26
anonymous
Чет, 20.06.13, 21:49
Хора нещо не мога да чатна, скрипт примерно от тоя род reg.php.txt искате да кажете, че може да бъде хакнат и да се разбере паролата ?? И ако да как защото нещо не си го представям...
phrozencrew
Чет, 20.06.13, 22:04

RE: HackQuiz #1 - Dog

” Хора нещо не мога да чатна, скрипт примерно от тоя род reg.php.txt искате да кажете, че може да бъде хакнат и да се разбере паролата ?? И ако да как защото нещо не си го представям... „
Не е задължително да се хакне конкретния файл с паролата. Достатъчно е да се хакне друг файл или форма, която да ти позволи да видиш PHP-сорса, на който си искаш файл.
programings
Пет, 21.06.13, 11:18
Тоест да качиш php shell на уеб сървърът през дадена уязвимост на сайта, и по този ще придобиеш цялостен контрол над всички файлове и над самата машина.
insecteater
Пет, 21.06.13, 13:05

RE: HackQuiz #1 - Dog

” Хора нещо не мога да чатна, скрипт примерно от тоя род reg.php.txt искате да кажете, че може да бъде хакнат и да се разбере паролата ?? И ако да как защото нещо не си го представям... „

Самият скрипт сам по себе си не може да бъде хакнат, но се сещам за два пропуска в сигурността.

1. Паролата пътува в явен вид по мрежата. Преди години с помощта на програмата wireshark за спорта пробвах да подслушвам трафика, който лаптопа на приятелката ми правеше. Леко е тъпо да си бачкаш на лаптопа, а в съседната стая някой с друг лаптоп да ти преглежда трафика. В днешни дни wireless свързаността е доста често срещана, и подслушването не е чак толкова трудно. Изхода в тоя случай е сайта да ползва SSLсертификат (даже за сериозни случаи е задължително), за да може подслушания трафик да не съдържа паролата в явен вид, но това за малки сайтове рядко се прави. Другият лесен начин е да се криптира паролата чрез JavaScript да речем и чак тогава да се прати от браузъра, но за криптирането и хешовете, ще напиша още един пост.

2. Паролата се съхранява в явен вид в самия файл. Всеки който по някакъв начин може да види отнякъде сорс кода на този файл, ще се добере до паролата. Начини за това могат да бъдат най - различни - оставено копие на сорса някъде на някой "приятел", експлоит било на сървъра или на съседен скрипт или каквото и да е, позволяващо да се види сорса на файла, дори не е задължително уязвимостта да е от конкретния сайт, а може да идва от сървъра, обслужващ няколко сайта едновременно. Идеята на тази уязвимост е, че потребител, който по принцип има read only права, виждайки тази парола може да придобие по-високо ниво на достъп, в зависимост какво прави по-надолу скрипта и за какво се използва тази парола.

insecteater
Пет, 21.06.13, 13:14
За целите на загадката е готино, но според мен стеганографията за парола при използване в сайтове за широка употреба не е толкова полезна. USER-AGENT-а си се използва тук там по предназначение - например в зависимост от браузъра може да ти бъде пуснато флаш или нещо друго, така, че браузърът ти да го покаже правилно. Снощи например пробвах новият телевизор, и се оказа, че браузъра не поддържа flash player, но youtube услужливо ми прати клипче по някакъв друг начин. И подозирам, че именно чрез USER-AGENT-та, е разбрал, че браузвам от телевизор, за да ми покаже каквото трябва. А и не е само този случай. Аз самият съм правил скриптове, които трябва да показват различни неща и да пренасочват на различни места, в зависимост дали страницата се отваря с браузър или с мобилен телефон.
insecteater
Пет, 21.06.13, 13:55
Относно хеширането, ще си позволя да преразкажа една статия (оригинала тук)

Ако не ви се чете цялата, поне обърнете внимание на това, че

Цитат
” ...Намирането на хеш на парола, като за подправка се използва нейният създаден по-рано хеш, връща същия хеш... „

Ето я и самата статия:

Как сигурно да съхраняваме пароли чрез PHP и MySQL

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

Не съхранявайте паролите без промяна

Това трябва да е очевидно. Ако някой придобие достъп до базата ви данни, тогава всички потребителски акунти са компрометирани. И не само това. Хората обикновено използват една и съща парола за различни сайтове, така че тези акаунти също ще бъдат компрометирани. Дори не е необходимо сайтът ви да бъде хакнат. Системен администратор или споделен сървър лесно може да разгледа базата ви данни.

Не се опитвайте да разработвате собствена система за сигурност на паролата

Най вероятно не сте експерт по сигурността. По-добре е да използвате решение, което доказано работи, вместо с нещо, създадено от вас.

Не "криптирайте" паролите

Криптирането може да изглежда като добра идея, но процеса е обратим. Всеки с достъп до кода ви няма да има проблеми да трансформира паролата обратно до оригиналната. Сигурността чрез замаскиране не е достатъчна.

Не използвайте MD5

Съхраняването на хешове на паролите е стъпка в правилната посока. Криптографските функции като MD5 са необратими, което прави трудно да се разбере оригиналната парола. За да проверите хеширана парола, просто намерете хеша на паролата с която потребителя влиза и я сравнете със съхранения такъв.
$password = 'swordfish';
$hash = md5($password); // Value: 15b29ffdce66e10527a65bc6d71ad94d 
 

Забележете, че по този начин е невъзможно да разберете оригиналната парола от базата данни. Ако потребителя забрави паролата си, просто му създавате нова.
Така че защо не MD5? ДОста е лесно да се направи списък с хешовете на милиони пароли (rainbow таблици) и да се сравнят хешовете, за да се намери оригиналната парола. Същото важи и за другата хешираща функция - SHA-1
MD5 също е уязвима на brute forcing (пробване на всички комбинации чрез автоматизиран скрипт), заради колизиите. ТОва означава, че различни пароли могат да имат еднакъв хеш, като по този начин е дори по-лесно да се намери работеща парола.

Не използвайте една криптографска "подправка" навсякъде в сайта

Подправката е низ, който се хешра заедно с паролата, така че повечето rainbow таблици (или атаки чрез речник) няма да сработят.
$password = 'swordfish';
$salt = 'something random';
$hash = md5($salt . $password); // Value: db4968a3db5f6ed2f60073c747bb4fb5 
 

Така е по-добре, в сравнение с използването единствено на MD5, но някой с достъп до кода ви може да види подправката и да създаде нова rainbow таблица.

Какво трябва да правите

 
  • Използвайте криптографски силна хешираща функция като например bcrypt (вижте функцията crypt() в PHP).[/li]  
  • Използвайте случайно генерирана подправка за всяка парола.[/li]  
  • Използвайте бавен хеширащ алгоритъм, за да направите атките чрез груба сила практически невъзможни.[/li]  
  • Като бонус, създавайте нов хеш за парола, всеки път, когато потребителя влезе в системата.[/li]
    $username = 'Admin';
    $password = 'gf45_gdf#4hg';
     
    // A higher "cost" is more secure but consumes more processing power
    $cost = 10;
     
    // Create a random salt
    $salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');
     
    // Prefix information about the hash so PHP knows how to verify it later.
    // "$2a$" Means we're using the Blowfish algorithm. The following two digits are the cost parameter.
    $salt = sprintf("$2a$%02d$", $cost) . $salt;
     
    // Value:
    // $2a$10$eImiTXuWVxfM37uY4JANjQ==
     
    // Hash the password with the salt
    $hash = crypt($password, $salt);
     
    // Value:
    // $2a$10$eImiTXuWVxfM37uY4JANjOL.oTxqp7WylW7FCzx2Lc7VLmdJIddZq 
     

    В примера по-горе обърнахме силна парола в хеш, който може без безпокойство да съхраним в базата данни. Следващия път, когато потребителя влезе, проверяваме паролата му, както следва:
    $username = 'Admin';
    $password = 'gf45_gdf#4hg';
     
    $sth = $dbh->prepare('
      SELECT
        hash
      FROM users
      WHERE
        username = :username
      LIMIT 1
      ';
     
    $sth->bindParam(':username', $username);
     
    $sth->execute();
     
    $user = $sth->fetch(PDO::FETCH_OBJ);
     
    // Hashing the password with its hash as the salt returns the same hash
    if ( crypt($password, $user->hash) == $user->hash ) {
      // Ok!
    }

    Няколко допълнителни забележки, за да предотвратите хакването на потребителските акаунти

     
  • Ограничавайте броя на невалидни опити за влизане.[/li]  
  • Изисквайте "силни" пароли.[/li]  
  • Не ограничавайте паролата до определена дължина - все пак запаметявате само хеш, така че голямата дължина няма значение ;)[/li]  
  • Позволявайте специални символи в паролата - няма причина да не го правите.[/li]

    Това е всичко. Весело писане на код!

  • редактиран от insecteater на 21.06.13 14:02
    programings
    Пет, 21.06.13, 14:15
    Много полезно инфо!

    Коментар

    за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.