Прийоми програмування на перл: Пишемо чекер accsess балки
Прийоми програмування на перл: Пишемо чекер accsess балки.(By Rel4nium | ngh.void.ru)
У цій статті я хочу розповісти про основи програмування на Перл на конкретному прикладі.
Перше що тобі знадобиться це інтерпретатор перла.В лінуксоподібної системах він є
за замовчуванням, але якщо ти вирішив програма під * win то тобі знадобиться: ActivePerl.Скачівай,
встановлюй, проблем виникнути не должно.Не буду довго просторікувати, а перейду до справи,
отже, приступимо.
Призначення скрипта - зондування сервера на наявність в системі веб Шелл, виконання
команд через вразливі скрипти.
Після того, як ми придумали призначення скрипта потрібно визначиться, що він повинен вміти,
скласти алгоритм роботи.
здібності:
- Працювати з файлами, відкривати / закривати / читати / записувати
- Для того, щоб вважати потрібну інформацію потрібно організувати правила відбору
- Пошук в потрібному файлі
- Занесення результатів пошуку в лог файл
алгоритм:
1) потрібно відкрити файл логу сервера
2) зібрати базу пошуку по потрібним іменах файлів, команд, запитів
3) ввести її в масив
4) великий масив з імен скриптів і ін, занести в інший масив
5) організувати за повним масиву пошук
6) вивести результат пошуку на екран
7) занести результат пошуку в файл
Тепер приступимо до написання самого коду скрипта, прямуючи з перерахованих вище пунктів.
#! / Usr / local / bin / perl
^^^^^^^^^^^^^^^^^^^^^
Перший рядок у скрипті вона повідомляє інтерпретатору що це perl додаток.
# Чекер логів апача
^^^^^^^^^^^^^^^^^^^
символ решітка використовується для вставки в тіло скрипт коментар
print "\ n";
^^^^^^^^^^^
Призначення даної команди вивести будь-яку інформацію на екран, або вивести її в
файл.В даному випадку ця команда використовується для того, щоб просто була пропущена
рядок, тобто \ n використовується для розриву рядків.
print "[Log check for Apache \ t";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Виводимо на екран фразу [Log check for Apache, після цієї фрази використовуємо табуляцію (тобто як
використання кнопки таб) .Зверніть увагу на синтаксис написання коду, після команди принт
у нас йдуть подвійні лапки, а вже в них ми прописуємо, що що нам потрібно вивести на екран,
і поле зв'язки коду крапку з запятой.Еслі не буде якогось із цих елементів,
перл інтерпретатора це не сподобається, і він виплюне тільки помилку.
Помилка може бути виду:
syntax error at /patch/to/script.pl line 9, near "print"
Excution of /patch/to/script.pl aborted due to compilation errors.
З даної помилки ми можемо зрозуміти наступне:
помилка в синтаксисі, в 9 лінії в функції принт, скрипт перерваний через помилки компіляції.
Тобто інтерпретатор нам говорить, що йому не подобається, залишається тільки виправити помилку в
9 рядку.
print "(C) Next Generation Hackers Group> coded by rel4nium]";
print ">>> Big thanks to Cr4sh and Gotius \ n \ n";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Про типові зв'язках коду я говорив вище.
$ File = "access.log"; # Лог файл
^^^^^^^^^^^^^^^^^^^^^
Тепер розглянемо код трохи складніше. У даній зв'язці змінної $ file, я привласнюю значення
access.log (далі я вже буду працювати не з ім'ям файлу, в нашому випадку access.log, а зі змінною
$ File, що значно підвищує простоту використання коду)
###########################
# Веб шелли:
@search [0] = "nstview"; @search [1] = "remview"; @search [2] = "r57shell";
@search [3] = "nghshell"; @search [4] = "c99shell"; @search [5] = "dump_price";
@search [6] = "phpMyAdmin"; @search [7] = "bd.pl"; @search [8] = "KA_uShell";
@search [9] = "phpshell"; @search [10] = "r57pws"; @search [11] = "WebShell";
@search [12] = "shell"; @search [13] = "cmd ="; @search [31] = "telnet.cgi";
# Команди:
@search [14] = "ls -al"; @search [15] = "wget"; @search [16] = "curl";
@search [17] = "uname";
# Shell запити:
@search [19] = "ac = shell"; @search [20] = "work_dir = /"; @search [21] = "tmp";
@search [22] = "img = 1"; @search [23] = "img = 2"; @search [24] = "d =";
@search [25] = "& ef ="; @search [26] = "& shell = 1"; @search [27] = "c = l & d =";
@search [28] = "c = d & d ="; @search [29] = "php & var ="; @search [30] = "c = v & d =";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
В даному шматку коду, я використовую масив @search зі змінними від [0] до [30] .Т.е в масив
я заношу 30 елементів, в моєму випадку 30 слов.ОБЯЗАТЕЛЬНО нумерація змінних повинна
починається з 0.
############################
open (FILE, "$ file") || die "Apache log File not found \ n"; # Помилка? Перевір вказаний шлях до лог файлу апача
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^
відкриваю файл (пам'ятаєш на початку я говорив про прирівнювання змінної $ file, балці файлу access.log, ось
тепер то це нам і треба було, як бачиш я не вписую ім'я файлу, а використовую змінну).
Конструкція відкриття файлу проста: open (FILE, "$ file")
open - команда відкриття файлу
FILE - хендл файлу (хендл знову ж використовується для зручності, тобто в подальшому ми можемо працювати не з
змінної $ file, а просто використовувати її хендл) .Знову ж зверни увагу на правила написання зв'язки
кода.А || die "Apache log File not found \ n"; використовується для того, щоб вивести помилку якщо файл
НЕ знайдений.
while (
^^^^^^^^^^^^^^
Запускаємо хендл FILE циклом while (тобто на початку був access.log -> $ file -> FILE) .Цікл - це
повторювана операція. У нашому випадку ми просто зациклюватися файл access.log, для того, щоб знайти в
ньому потрібні слова.Т.е цикл виконується до тих пір поки не будуть знайдені всі слова (з масиву @search)
{If (/ (@ search [0] | @search [1] | @search [2] | @search [3] | @search [4] | @search [5] | @search [6] | @search [ 7] | @search [8]
| @search [9] | @search [10] | @search [11] | @search [12] | @search [13] | @search [14] | @search [5] | @search [16] | @ search
[17] | @search [19] | @search [20] | @search [21] | @search [22] | @search [23] | @search [24] | @search [25] | @search [25 ] |
@search [26] | @search [27] | @search [28] | @search [29] | @search [30] | @search [31]) / i) {push @matches, $ _;}}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
тут використовуємо логічну операцію якщо (if), укладену в {} скобкі.Сдесь і відбувається процес пошуку
змінних масиву @ search.Т.е умова йде таким чином: якщо якась із змінних масиву @search
знайдена, це заноситься в інший масив, названий @matches.
в результаті отримуємо 1 масив @matches, зі знайденими в файлі access.log змінними масиву @search.
print @matches;
^^^^^^^^^^^^^^^
виводимо вміст масиву @matches на екран
print "Work is finished! \ n";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
виводимо на екран Work is finished!
open (LogFile, '>> logfile.txt');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Створюємо і відкриваємо файл logfile.txt (за допомогою поставлених до імені файлу >>, ці квадратні дужки говорять про
тому, що потрібно створити файл для запису і відкрити його) .Тут же присвоюємо хендл LogFile
print LogFile "IP adress \ t Time \ t \ t \ t \ t Script's \ n";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
пишемо у відкритий логфайлів (тобто прямо в файл logfile.txt)
print LogFile @matches;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
Друкуємо в лог файл вміст масиву @matches, тобто знайдених запитів / імен масиву @search.
print LogFile "Work is finished! \ n";
^^^^^^^^^^^^^^^^^^^^^^^^
Пишемо в лог файл, що робота закінчена
close FILE;
^^^^^^^^^^^^^^^^^^^^^^^^
закриваємо файл логу (з яким і працює цей скрипт)
close LogFile;
^^^^^^^^^^^^^^^^^^^^^^^^
закриваємо лог файл
EOF
^^^^^^^^^
рядок завершення програми
Тепер скрипт готовий до роботи, і буде корисний для потреб системного адміністратора))
Думаю, за допомогою моєї статті ти трохи розібрався в синтаксисі, основні функції мови perl,
і тепер уже можна вивчати перл далі і глибше.
> Раджу прочитати:
Clinton Pierce Освой самостійно Perl за 24 години
Специфікація мови Perl
> URL:
www.wmate.ru
www.codenet.ru
ps Завантажити скрипт описаний в статті можна з ngh.void.ru/soft/d/checklog.rar
Коментарі
Коментуючи, пам'ятайте про те, що зміст і тон Вашого повідомлення можуть зачіпати почуття реальних людей, проявляйте повагу та толерантність до своїх співрозмовників навіть у тому випадку, якщо Ви не поділяєте їхню думку, Ваша поведінка за умов свободи висловлювань та анонімності, наданих інтернетом, змінює не тільки віртуальний, але й реальний світ. Всі коменти приховані з індексу, спам контролюється.