2009/07/31

Samurai WTF

Вышла следующая девелоп версия Samurai WTF - платформы для аудита веб-приложений.
Ченджлог:
Installed Cewl from dijininja.org -- Kevin Johnson
Updated Ubunutu patches as of July 23, 2009 -- Frank DiMaggio
Updated w3af from SVN as of July 25, 2009 -- Kevin Johnson
Fixed sqlninja.sh -- Frank DiMaggio
Fixed sqlmap.sh to include the -h -- Kevin Johnson for Tim Medin
Updated sqlmap to 0.7 -- Frank DiMaggio and Kevin Johnson
Updated Firefox add-on Hackbar -- Kevin Johnson
Updated Firefox add-on XSS Me -- Kevin Johnson
Updated Firefox add-on Header Spy -- Kevin Johnson
Updated Firefox add-on User Agent Switcher -- Kevin Johnson
Updated jBroFuzz to 1.4 -- Kevin Johnson
Upgrade nmap to 5.0 -- Kevin Johnson
Installed Durzosploit from SVN as of July 18, 2009 -- Kevin Johnson
Installed BrowserRider from SVN as of July 18, 2009 -- Frank DiMaggio
Added Jason Wood's username generator scripts -- Kevin Johnson
Updated MaltegoCE to 2.02 -- Frank DiMaggio
Added Laudanum Files -- Kevin Johnson
Added GPScan.rb from dijininja.org -- Kevin Johnson
Added HowTo videos from Pauldotcom -- Kevin Johnson
Картинка:

2009/07/24

re - регулярные выражения в python

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

Про квантификацию: жадная, ленивая, ревнивая. Ревнивой я вообще никогда не пользовался, а вот про жадную пару слов. К примеру, символ "точка" означает любой символ. Выражение ".+" означает один и более символов - вплоть до конца анализируемого фрагмента. С таким выражением далеко не уедешь, поясню почему. Имеем следующий фрагмент html-кода:
<a href='www.site.com'>GSOM</a> <b>пум-пу-рум</b>
Если применить к этому фрагменту выражение <a href='(.+)'> с целью получения ссылки, то оно жадно зохавает всю строку, ибо последний знак ">" встречается и в самом в конце! Уталить жадность точки поможет вопросительный знак. И вот, если применить выражение "<a href='(.+?)'>", то получим то, что надо: www.site.com

Вообще, у меня выражение (.+?) - одно из самых востребованных при парсинге html-кода.
В качестве примера проапгрейдим один из предыдущий с выдачей гугла так, чтобы на экран выводились только ссылки по запросу:
import urllib2, re

search = 'ivinside.blogspot.com'
headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'}
req = urllib2.Request("http://www.google.ru/search?q=" + search + "&start=0&ie=utf-8&oe=utf-8", None, headers)
response = urllib2.urlopen(req)

for url in re.findall(r'<class="r"><href="(.+?)">')
Итак регулярное выражение '<class="r"><href="(.+?)">' откуда я его взял? Посмотрел в исходнике выдачи гугла и увидел нечто похожее на <h3 class=r<>a href="http://site.com" target=_blank class=l ... и применил к этому своё излюбленное точка-плюсик-вопросительный-знак. То-то же.

2009/07/21

urllib2 - начало

urllib2 - библиотечка, с помощью которой удобно обрабатывать веб-странички, заполнять веб формы, обрабатывать куки, соединяться через прокси и прочее.

Простейший пример:
import urllib2
response = urllib2.urlopen('http://ivinside.blogspot.com/')
print response.read()
Эта программа показывает на экран html-кодесы данного блога. Но не всегда можно получить содержимое странички, например, результаты поиска в Google таким образом не посмотришь, ибо он фильтрует по строке User-Agent всякие нежелательные приложения, в питоне по умолчанию она что-то типа "Python-urllib/2.5".

С помощью следующего кода выводим на экран результат поиска в гугле по запросу "ivinside.blogspot.com", прикидываясь Internet Explorer под Vista:
import urllib2

search = 'ivinside.blogspot.com'
headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'}
req = urllib2.Request("http://www.google.ru/search?q=" + search + "&start=0&ie=utf-8&oe=utf-8", None, headers)
response = urllib2.urlopen(req)
print response.read()
Ну, и напоследок сегодня, как заполнять веб-формы. Возьму для примера веб-сервис whois. Как посмотреть какие параметры при этом передаются в запросе POST? Я смотрю плагином Live HTTP headers для Firefox и считаю его приемлемым. Итак, заполняем первую форму вручную, нажимаем кнопочку и смотрим в окно плагина. Там, среди всего прочего, будут интересующие нас параметры:
Host=whois.ripn.net&Whois=test.ru
Добавим их как параметры функции, предварительно закодировав, как того требует спецификация:
import urllib
import urllib2

headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'}
values = {'Host' : 'whois.ripn.net', 'Whois' : 'test.ru'}
data = urllib.urlencode(values)
req = urllib2.Request('http://www.ripn.net:8082/nic/whois/whois.cgi', data, headers)
response = urllib2.urlopen(req)
print response.read()
Ок, получили страничку, где содержится информация про домен test.ru
В следующей заметке, наверно, расскажу про регулярные выражения, чтобы из полученных страничек можно было извлекать нужные данные.

2009/07/11

Python для чайников и профи

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

Первая книга, по которой я начал изучать python, - Язык программирования Python. В авторах значится и сам создатель языка, что дает некую надежду на адекватность книги. Действительно, прочитав первые 100 страниц, я отложил все эти чтения, взялся за практику и открывал книгу уже по мере необходимости.

Далее, можно взять на заметку лекции г-на Сузи, в которых кратко изложена суть и минимум мути. В качестве справочника использую pydoc.org, поиск по классам и методам обычно дает результаты.

Вот недавно заказал многообещающую книжку Изучаем Python, 3-е издание, с нетерпением жду доставки. Очень хотелось бы ознакомиться с Gray Hat Python: Python Programming for Hackers and Reverse Engineers, но с амазоном я, к сожалению, не дружу.

2009/07/07

И, да!..

Идея вести тематический блог у меня зародилась давно, ибо блог в стиле ЖЖ изжил себя. Это уже и так потятно, что отмотав записи на пару лет назад, можно понять какое было безобразие.

Итак, пришло время для новых концепций. Этот блог будет исключительно технической направленности, с основными тэгами "python", "security" и прочими смежными. По поводу первого буду конспектировать свои достижения (чтобы не забыть), а по поводу второго – в силу своей специфики, так сказать.

К слову, название блога взято из дзена Питона, а вот над оформлением придется ещё поработать. В любом случае
>>> print 'hello world & welcome!'