1 of 58

2 of 58

  • QA gangsta Lead в

  • Больше 5 лет тестирую на наличие Web уязвимостей

  • Больше 8 лет в тестировании

  • Провожу обучение по Security testing в Start-it

  • Веду блог по Security testing https://svyat.tech

  • Веду телеграмм канал https://t.me/qa_security

Свят Логин

3 of 58

4 of 58

5 of 58

Как можно аутентифицироваться:

  • Пароль

  • Кука

  • Single Sign-On

  • Certificate-Based Authentication

  • и тд.

6 of 58

SQL injection

2FA или Двухфакторная аутентификация

  • SMS не надо плиз)))

  • QR-code

  • Push

  • One-time password

7 of 58

SQL injection

OWASP Testing Guide

1. Testing for Credentials Transported over an Encrypted Channel

2. Testing for Default Credentials

3. Testing for Weak Lock Out Mechanism

4. Testing for Bypassing Authentication Schema

5. Testing for Browser Cache Weaknesses

6. Testing for Weak Password Policy

7. Testing for Weak Security Question Answer

8. Testing for Weak Password Change or Reset Functionalities

9. Testing for Weaker Authentication in Alternative Channel

8 of 58

SQL injection

  1. Testing for Credentials Transported over an Encrypted Channel

9 of 58

SQL injection

Что проверить

POST http://www.example.com:443/login.do HTTP/1.1

Host: www.example.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.14) Gecko/20080404

Accept: text/xml,application/xml,application/xhtml+xml,text/html

Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Referer: https://www.example.com/homepage

Cookie: SERVTIMSESSIONID=s2JyLkvDJ9ZhX3yr5BJ3DFLkdphH0QNSJ3VQB6pLhjkW6F

User=test&Pass=test&portal=ExamplePortal

10 of 58

SQL injection

2. Testing for Default Credentials

11 of 58

SQL injection

Что проверить

  • Распространенные дефолтные имена (admin, root, guest, test)

  • Названия учетки в честь приложения test.com - test/test

  • Все верхние пункты с пустыми паролями

  • Пароль у вновь созданного пользователя

  • Если есть автогенерация, определить, чтоб не было последовательных генераций типа user7811

12 of 58

Пароль Кол-во

123456 120511

12345 48452

password 39448

DEFAULT 34275

123456789 26620

qwerty 20778

12345678 14172

abc123 10869

pussy 10683

1234567 9468

Топ паролей

13 of 58

Топ паролей

14 of 58

15 of 58

Brute force

email or username

Password

Authorization

User

Pass

16 of 58

17 of 58

SQL injection

3. Testing for Weak Lock Out Mechanism

18 of 58

SQL injection

Риски, которые стоит учитывать:

1. Каков риск подбора пароля для приложения?

2. Достаточно ли CAPTCHA для снижения этого риска?

3. Используется ли механизм блокировки на стороне клиента?

4. Каков порог срабатывания блокировки?

19 of 58

SQL injection

3. Testing for Weak Lock Out Mechanism

Если 1 юзер, то будь аккуратен)))

20 of 58

SQL injection

4 Testing for Bypassing Authentication Schema

21 of 58

SQL injection

Direct page request (Прямой запрос страницы)

22 of 58

SQL injection

Parameter modification (Модификация параметра)

23 of 58

24 of 58

SQL injection

SQL-инъекция

25 of 58

SQL injection

5 Testing for Browser Cache Weaknesses

26 of 58

SQL injection

Что проверить

  • Кнопка назад�-- Cache-Control: must-revalidate

  • Что попадает в кеш браузера

-- Cache-Control: no-cache

27 of 58

SQL injection

Хранения кеша

- Mozilla Firefox:

-- Unix/Linux: ~/.cache/mozilla/firefox/

-- Windows: C:\Users\<user_name>\AppData\Local\Mozilla\Firefox\Profiles\<profile-id>\Cache2\

- Internet Explorer:

-- C:\Users\<user_name>\AppData\Local\Microsoft\Windows\INetCache\

- Chrome:

-- Windows: C:\Users\<user_name>\AppData\Local\Google\Chrome\User Data\Default\Cache

-- Unix/Linux: ~/.cache/google-chrome

28 of 58

SQL injection

6 Testing for Weak Password Policy

29 of 58

SQL injection

Что проверить

1. Какие символы разрешено и запрещено использовать в пароле?

2. Как часто пользователь может менять свой пароль?

3. Когда пользователь должен изменить свой пароль?

4. Как часто пользователь может повторно использовать пароль?

5. Насколько следующий пароль должен отличаться от последнего пароля?

6. Какова минимальная и максимальная длина пароля?

7. Запрещается ли пользователю использовать свое имя в качестве пароля?

30 of 58

SQL injection

7 Testing for Weak Security Question Answer

31 of 58

SQL injection

Что проверить

Плохие:

- Ответы могут быть известны близким, например «Какая девичья фамилия?

- Ответы можно легко угадать, например, «Какой твой любимый цвет?»

- Ответы могут быть общедоступными, например "Какой твой любимый фильм?" - ответ можно легко найти на странице профиля пользователя в социальной сети.

Хороший:

Как называется ваша первая игрушка?

32 of 58

SQL injection

8 Testing for Weak Password Change or Reset Functionalities

33 of 58

SQL injection

Что проверить

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

2. Найти, нету ли в смене или сброса паролей уязвимость для CSRF.

3. Понять какая информация требуется для сброса пароля?

4. Как сообщается пользователю про сброс пароля?

5. Сброшенный новый пароль генерируются случайным образом?

6. Требует ли функция подтверждения для сброса пароля перед изменением?

7. Требуется ли старый пароль для завершения изменения?

34 of 58

SQL injection

9 Testing for Weaker Authentication in Alternative Channel

35 of 58

SQL injection

Что проверить

Есть сайт:

http://www.example.com

Есть аутентификация, с использованием Transport Layer Security:

https://www.example.com/myaccount/

А есть аутентификация для мобильного веба, без Transport Layer Security:

http://m.example.com/myaccount/

36 of 58

SQL injection

Что проверить

Понять первичный механизм

Определить другие каналы

-- файл robots.txt, sitemap.xml и тд.

-- поиск в логах HTTP проксях «mobile», «mobile app»,«auth»,« sso» и тд

-- поиск разных веб-сайтов одной организации или с одинаковым доменном

37 of 58

38 of 58

39 of 58

SQL injection

OWASP Testing Guide

1 Testing Directory Traversal File Include

2 Testing for Bypassing Authorization Schema

3 Testing for Privilege Escalation

4 Testing for Insecure Direct Object References

40 of 58

SQL injection

1 Testing Directory Traversal File Include

41 of 58

Обращение к серверу через урл

http://example.com/getUserProfile.jsp?item=../../../../etc/passwd

42 of 58

Обращение к серверу через куки

Cookie: USER=1826cc8f:PSTYLE=../../../../etc/passwd

43 of 58

44 of 58

SQL injection

2 Testing for Bypassing Authorization Schema

45 of 58

SQL i

Векторы атаки вертикальный

Web App

Admin

User

Manager

web_app.com/

admin/

46 of 58

SQL i

Векторы атаки горизонтальный

http://web_app.com/user_info

?user=1

Юзер 1

Юзер 2

http://web_app.com/user_info

?user=2

Аноним

47 of 58

48 of 58

SQL injection

3 Testing for Privilege Escalation

49 of 58

SQL injection

Манипулирование группой пользователей

POST /user/viewOrder.jsp HTTP/1.1

Host: www.example.com

...

groupID=grp001&orderID=0001

50 of 58

SQL injection

Манипулирование профилем пользователя

HTTP/1.1 200 OK

Server: Netscape-Enterprise/6.0

Date: Wed, 1 Apr 2006 13:51:20 GMT

Set-Cookie: USER=aW78ryrGrTWs4MnOd32Fs51yDqp; path=/; domain=www.example.com

Set-Cookie: SESSION=k+KmKeHXTgDi1J5fT7Zz; path=/; domain= www.example.com

Cache-Control: no-cache

Pragma: No-cache

Content-length: 247

Content-Type: text/html

Expires: Thu, 01 Jan 1970 00:00:00 GMT

Connection: close

<form name="autoriz" method="POST" action = "visual.jsp">

<input type="hidden" name="profile" value="SysAdmin">\

<body onload="document.forms.autoriz.submit()">

</td>

51 of 58

SQL injection

4 Testing for Insecure Direct Object References

52 of 58

SQL injection

Случай, когда значение параметра используется непосредственно для выполнения операции в системе

http://foo.bar/changepassword?user=someuser

53 of 58

SQL injection

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

http://foo.bar/somepage?invoice=12345

54 of 58

SQL injection

IAM - Identity Access Management

55 of 58

SQL injection

Где поиграться?

56 of 58

SQL injection

Где взять сумасшедшие данные

57 of 58

58 of 58

Спасибо за внимание!

svyat.tech

@qa_security