2010/03/23

skipfish - сканер безопасности web-приложений от Google

На днях компания Google представила свой open source инструмент для аудита безопасности web-приложений, наподобие широко известного nikto. Однако разработчик заявляет ряд преимуществ перед имеющимися решениями, среди них:
  • высокая скорость работы (~500 запросов в секунду через Интернет, ~2000 - через локальную сеть)
  • простота использования
  • хорошо продуманные тест-кейсы (весь список проверяемых уязвимостей доступен в README к программе) 
Иструмент доступен для скачивания в исходных кодах отсюда. Для компиляции мне пришлось доустановить заголовочные файлы для ssl. Далее распаковываем и компилируем.
# apt-get install libssl-dev
$ tar -xzfp skipfish-1.13b.tgz
$ cd skipfish/
$ make
В случае успеха в папке появится исполняемый файл skipfish, собственно то, что нам нужно. В папке dictionaries находятся словари, которые могут использоваться при составлении карты сайта. Словари включают в себя расширения и ключевые слова. Чем больше словарь, тем более глубокий фаззинг сайта будет проведен. Словарь по умолчанию должен называться skipfish.wl и находиться в одной папке с исполняемым файлом: нужно перенести и переименовать нужный словарь из соотвествующей папки.


Итак, приступим же наконец к сканированию! Типичная команда сканирования выглядит следующим образом:
$ ./skipfish -MEU -o ./example http://www.example.com/
Здесь "-MEU" - опции для создания отчета, чтобы всё было хорошо, "./example" - имя папки в которую будет писаться отчет, а "http://www.example.com/", как несложно догадаться, адрес сайта.

Поддержка cookie, HTTP аутентификации и прочих плюшек имеется в полном объеме. Все настройки можно глянуть по команде:
$ ./skipfish -h
Доставила динамическая консольная статистика и детализированный отчет, поражающий мозг обыденного пользователя nikto. По количеству найденных уязвимостей, на первый взгляд (на основе сканирования одного сайта), оставляет позади nikto последней версии. Респект и уважуха в общем.

2010/03/13

Lenovo X200t & Debian Squeeze: wi-fi и сенсорный экран

В связи с недавним переходом на Debian Squeeze запосчу несколько заметок по допиливанию функциональности моего ноутбука в этой среде.

Практически всё оборудование подхватилось из коробки при условии выбора инсталляционного пункта "Laptop" при установке.


1. Wi-fi
Имеем:
$ lspci | grep -i wireless
03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection
Прошивка для этого компонента небесплатна, поэтому придется подключить non-free компоненты основного репозитория в /etc/apt/sourses.list. В итоге в списке должна присутствовать строчка вида:
deb http://mirror.yandex.ru/debian/ squeeze main contrib non-free
Далее обновляем список пакетов
# apt-get update
И устанавливаем пакеты
# apt-get install firmware-iwlwifi wireless-tools
Подгружаем модуль ядра, если таковой не был подгружен автоматически
# modprobe iwlagn
Радуемся
# ifconfig wlan0 up


2. Сенсорный экран
Для настройки экрана понадобится остановить X сервер, сгенерировать xorg.conf и подгрузить модуль ядра wacom, который уже установлен в системе:
# modprobe wacom


# /etc/init.d/kdm stop
# /etc/init.d/gdm stop
# /etc/init.d/xdm stop
# cd /etc/X11/
# Xorg -configure
А потом отредактировать его, добавив следующие секции:
Section "InputDevice"
   Driver "wacom"
   Identifier "cursor"
   Option "Device" "/dev/ttyS0"
   Option "Type" "cursor"
   Option "ForceDevice" "ISDV4"
   Option "Mode" "Absolute"
EndSection


Section "InputDevice"
   Driver "wacom"
   Identifier "stylus"
   Option "Device" "/dev/ttyS0"
   Option "Type" "stylus"
   Option "ForceDevice" "ISDV4"
EndSection


Section "InputDevice"
   Driver "wacom"
   Identifier "eraser"
   Option "Device" "/dev/ttyS0"
   Option "Type" "eraser"
   Option "ForceDevice" "ISDV4"
EndSection


Section "InputDevice"
   Driver "wacom"
   Identifier "touch"
   Option "Device" "/dev/ttyS0"
   Option "Type" "touch"
   Option "ForceDevice" "ISDV4"
EndSection
А также добавив в секцию ServerLayout следующие строки:
InputDevice "cursor" "SendCoreEvents"
InputDevice "stylus" "SendCoreEvents"
InputDevice "eraser" "SendCoreEvents"
InputDevice "touch" "SendCoreEvents"

2010/03/12

Чтиво

Предлагаю ознакомиться со списком статей по питону, которые мне показались весьма интересными (навеяно просмотром питоньей rss ленты Хабра):

Изучаем Python за 10 минут (eng рус)
Написание Qt приложений на языке Python (рус)
Python best practices (eng)
Шпаргалка по Питону (eng)
Python: советы, уловки, хаки (eng рус)
Скрипты Python против Bash (рус)
Немного про py2exe (рус)
Основы работы с потоками в языке Python (рус)
Сила и красота декораторов, метапрограммирование (рус)
Memoization в Python, оптимизация работы программ (рус)
Специфика циклов в Питоне (рус)

2009/12/27

ctypes - наш друг!

Модуль ctypes с легкостью позволяет использовать функции сторонних DLL или SO файлов. В ctypes есть три метода подгрузки библиотек:
  • cdll() - использует соглашение cdecl при вызове функций
  • windll() - использует stdcall (для Microsoft Win32 API)
  • oledll() - использует cdecl + коды возврата HRESULT (для функций Microsoft COM)
Пример: попробуем воспользоваться широко известной функцией printf() из языка С. В Linux она находится в библиотеке /lib/libc.so.6, в Windows - C:\windows\system32\msvcrt.dll.

Код для Linux:
from ctypes import *
libc = CDLL("libc.so.6")
message = 'Hello world!\n'
libc.printf('Testing: %s', message)
Код для Windows:
from ctypes import *
msvcrt = cdll.msvcrt
message = 'Hello world!\n'
msvcrt.printf('Testing: %s', message)
Исчерпывающий мануал по ctypes находится здесь.

2009/12/07

Монтирование iso в Linux

# mkdir /mnt/iso
# mount -o loop -t iso9660 /home/iv/disk.iso /mnt/iso
# ...
# umount /mnt/iso
# echo profit!

2009/11/14

Минимизация всех окон в KDE4

Меня очень расстроил тот факт, что для минимизации окон следует подключать отдельный виджет, который жрет память и место на панели. Я начал искать пути отступления и по мотивам этого поста докладываю.

Для сворачивания всех окон используем этот скрипт:
#!/bin/sh
target=on
if xprop -root _NET_SHOWING_DESKTOP | fgrep '= 1' ; then
target=off
fi
wmctrl -k ${target}
Для его корректной работы необходима утилита xprop, входящая в пакет x11-utils, а также утилита wmctrl, которая сама по себе. После сохранения скрипта в каком-то файле и chmod'ания на +х добавляем ссылку на него в KDE Menu (kmenuedit) и во вкладке Advanced прописываем Current shortcut key. У меня это Win+D.

Profit!

2009/11/08

Определение транскодов в Linux

Под "транскодом" в данном случае я подразумеваю mp3 файл переконвертированный во flac. Таким образом размер файла раздувается, а качество остается без изменений. На слух, конечно, это тоже вполне заметно, а вот убедиться точно поможет программа Audacity.

Открываем нужный трек (Ctrl+O). Далее из меню Analyze > Plot spectrum построит нам спектрограмму, на которой можно увидеть распределение частот. Lossy форматы отличаются тем, что обрезают верхний диапазон частот для уменьшения размера файла. Это можно пронаблюдать на следующем рисунке:



Виден явный спад в области 16 кГц. А так выглядит спектрограмма нормального трека:

2009/11/01

Играемся с lossless в Linux

Опишу решение ряда проблем, вставших перед рядовым слушателем lossless музыки в Linux, в частности Debian-based дистрибутивах (я использую Kubuntu):
  • Конвертация APE -> FLAC
  • Разделение образа диска на треки по CUE файлу
  • Именование треков по тэгам
Для конвертации понадобятся два пакета: flac и mac. Первый устанавливается из репозиториев:
sudo apt-get install flac
Второго в репозиториях нет, поэтому нужно скачать .deb файл отсюда и далее:
sudo dpkg -i mac-3.99-u4_b3-1_i386.deb
Для разделения образа на треки нужны пакеты cuetools и shntool:
sudo apt-get install cuetools shntool
Для именования треков - софтина EasyTAG с непростым GTK фронтэндом:
sudo apt-get install easytag
Конвертим из APE во FLAC все файлы в текущей директории:
shnconv -o flac *.ape
Делим FLAC образ на треки:
cuebreakpoints file.cue | shnsplit -o flac image.flac
Делим APE образ на треки во FLAC:
cuebreakpoints file.cue | shnsplit -o flac image.ape
После разделения у треков будут имена типа "split-track01.flac", это не гуд. Но тэги будут прописаны по CUE файлу, стало быть, можно переименовать файлы согласно тэгам. И в этом поможет EasyTAG, работу с которой описывать смысла нет, ибо gui :(

2009/09/28

scp - безопасное копирование файлов между компьютерами

Открываю тэги "useful" и "*nix"! Утилита scp пригодится, если нужно перекинуть файл с одного компа на другой. В большинстве случаев хватает этого синтаксиса:
scp <юзер>@<комп>:<что копировать> <юзер>@<комп>:<куда копировать>
В частном случае утилита может быть использована для передачи файлов между локальным компьютером и удаленным. В таком случае реквизиты <юзер>@<имя компа> локального компьютера можно опустить.

2009/09/16

Радости разработки на Django

Недавно заинтересовался разработкой веб-приложений на Python, соотвественно, решил воспользоваться фреймворком Django. В этой заметке хочу описать процесс создания и запуска проекта Django на Apache, ибо запуск приложений на сервере хостера заметно отличается от запуска их на локальном компьютере (что описывается в первых главах DjangoBook), как оказалось.

На моём хостинге уже был установлен Django и соотвествующим образом настроен Apache, поэтому первое, что нужно сделать - это создать проект. В моем случае последовала команда:
~/www/webapp$ django-admin.py startproject mysite
После этого в папке mysite создался проект django, включающий в себя несколько файлов (подробное описание их опускаю, можно найти в DjangoBook).
Далее согласно мануалу нужно создать WSGI-приложение webapp.wsgi следующего содержания:
import os, sys
sys.path.append('/home/www/webapp)
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()
В итоге получаем приветственную страницу Django по ссылке http://сайт/webapp
Чтобы получать доступ к Django из корня сайта, нужно написать rewrite правило в файле .htaccess, который должен располагаться в папочке public_html:
RewriteEngine On
RewriteRule ^(.*)$ /webapp/$1 [L,QSA]
Теперь привественная страничка доступна по нормальной ссылке, далее можно продолжать разработку согласно DjangoBook.