Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Эдриан_Прутяну_Как_стать_хакером_сборник_практическиз_сценариев.pdf
Скачиваний:
18
Добавлен:
19.04.2024
Размер:
20.34 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w Click

to

BUY 66  Глава 2.Эффективное обнаружение

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

alert(), что приводит к выполнению произвольного кода.

Запутывание (обфускация) кода

Не все брандмауэры отбрасывают вредоносные строки, позволяя остальным пройти. Некоторые встроенные решения разрывают соединение напрямую, обычно в форме ответа 403 или 500. В таких случаях бывает трудно определить, какаячастьполезнойнагрузкисчитаетсябезопасной,акакаязапустилаблоккода.

По своей структуре встроенные межсетевые экраны должны быть достаточно быстрыми, и они не могут значительно задерживать обработку входящих данных. Результатом обычно является простая логика при попытке обнаружить SQL-инъекцию (SQLi) или XSS-атаки. Использование прописных символов в случайном порядке не можетобманутьэти фильтры, но можно смело предположить, что они не отображают на лету каждую за - прашиваемую HTML-страницу,не говоря уже о выполнении JS-кода для поиска вредоносной активности. Чаще всего встроенные межсетевые экраны приложений будут искать определенные ключевые слова и помечать входные данные как потенциально опасные. Например, alert() может вызвать блокировку, в то время как само по себе слово alert выдаст слишком много ложных срабатываний.

Чтобы увеличить шансы на успех и снизить уровень шума, можно изменить способ вызова функции alert() неограниченным образом – все благодаря JavaScript.Можно протестироватьэто в консоли браузера,проверив встроенную функцию alert(). Объект window будет содержать ссылку на нее, и мы можем подтвердить это, вызвав функцию без скобок. Консоль укажет, что это встроенная функция с [native code],отображаемая в качестве ее тела.Следовательно, это не пользовательская функция,и она определяется ядром браузера­ .

В JavaScript естьнесколько способовдоступа к свойствам объекта,втом числе ссылки на функции,такие как alert.

На рисунке показано, как можно получить доступ к той же функции напрямую или с помощью нотации массива,используя строку "alert" в квадратных скобках.

Рис.2.34. Различные способы получения доступа к функции alert()

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

«Полиглот»  67 BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

Чтобыобойтиэлементарныефильтры,которыемогутотбрасыватьподозри-

 

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

тельные строки, такие как alert(1), можно использовать простое кодирование.

Используя JS-функцию parseInt, можно получить целочисленное представление любой строки,применив пользовательскую базу.В этом случае получим базовое представление строки "alert" ("alert",30).Чтобы преобразоватьполученноецелоечислообратновегостроковыйэквивалент,используйтевстроенный метод toString(), передавая целочисленную базу в качестве первого параметра.

Рис.2.35. Кодирование и декодирование строки alert

Теперь,когда мы знаем,что 8680439..toString (30) –это эквивалентстроки "alert" , можно использовать объект window и нотацию массива для доступа к нативному коду функции alert().

На рисунке показано,как вызвать функцию alert() с помощью запутанной строки.

Рис.2.36. Выполнение функции alert() с закодированной строкой

Можно использоватьтотже процесс,чтобы скрытьвызов функции console. log(). Как ибольшинстводоступныхвстроенных функций,console такжедоступна через объект window.

На рисунке показано, как кодировать строки console и log и использовать одну и ту же нотацию массива для доступа к свойствам и подсвойствам, пока не доберемся до нативного кода функции console.log().