Організації inurl shoutbox frame php. Ламаємо і захищаємо WordPress своїми руками. Автоматизація процесу тестування

Хотіли б ви мати на своєму сайті міні-чат? Думаю, багато хто скаже "ТАК". Сьогодні ми розглянемо чудовий міні-чат Shoutbox, він працює на php, mysql і jQuery. Перш ніж почати роботу, подивіться Демо (після раджу до кінця прочитати урок, щоб не робити поспішних висновків)


Чи не правда класно? Тепер про те, як таку річ реалізувати.

Скрипт для роботи використовує БД Mysql. Давайте створимо в базі таблицю shoutbox для спрощення завдання Вам і собі привожу готовий SQL-запит:

CREATE TABLE `shoutbox` (
`Id` INT (5) NOT NULL AUTO_INCREMENT,
`Date` TIMESTAMP NOT NULL,
`User` VARCHAR (25) NOT NULL,
`Message` VARCHAR (255) NOT NULL,
PRIMARY KEY ( `id`)
) CHARACTER SET \u003d utf8;

Обробляє повідомлення файл shoutbox.php. Знайдіть в ньому такі рядки і відредагуйте:

define ( "HOST", "Ваш MySql-хост - зазвичай це localhost");
define ( "USER", "ім'я користувача MySql");
define ( "PASSWORD", "пароль до вашої MySql");
define ( "DB", "Ім'я БД");

Думаю, з цим складнощів бути не повинно Ще пара налаштувань в цьому ж файлі:

header ( "Location: index.html");
$ Res \u003d getContent ($ link, 50);

header - Тут ми відправляємо недбайливих користувачів, які намагаються безпосередньо викликати роботу файлу, shoutbox.php на сторінку index.html.
getContent ($ link, 50) - кількість повідомлень на сторінку. В даному прикладі буде вибрано 50 останніх повідомлень.

Тепер в потрібному місці вставляємо форму відправки повідомлення і div-контейнер, Який буде містити останні повідомлення чату:



















останні повідомлення






Звичайна форма з 3-ми input. Після форми йде div # container, нехай вас не бентежить наявність самотнього тега p. Всі повідомлення виводяться у вигляді

Ім'я - повідомлення

(Див. Файл shoutbox.php). І в кінці ми підключаємо jQuery і сам скрипт shoutbox.js (можете це зробити і традиційно між тегами head)

CSS тут відповідає тільки за зовнішній вигляд чату. Тому детально розглядати його в цьому уроці не будемо. Просто не забудьте включити стилі з файлу css / general.css на вашу сторінку, або, що ще краще, зробіть індивідуальний дизайн. Єдине що варто пам'ятати, id і class з наведеного вище коду використовує і скрипт shoutbox.js, тому якщо ви будете змінювати імена id і class на свої, не забудьте зробити це також в shoutbox.js

На сьогодні це все. Нехай цей урок стане для вас подарунком на першотравневі свята, думаю, цей міні-чат ви знайдете куди прилаштувати

P.S. Для тих хто хоче з цього скрипта отримати більш повноцінний чат, злегка доопрацюємо оригінальний скрипт:

Сенс в тому, що ми будемо оновлювати зміст віконця чату через певний час. Для цього нам знадобиться плагін, який суттєво спростить завдання jquery.timers.js. Його підключаємо як зазвичай, а в shoutbox.js додаємо наступні рядки:

$ ( ". Content\u003e p"). EveryTime (30000, function () (
$ .Ajax ((
type: "POST", url: "shoutbox.php", data: "action \u003d update",
complete: function (data) (
loading.fadeOut ();
messageList.html (data.responseText);
messageList.fadeIn ( "fast");
}
});

EveryTime (30000) - час в мілісекундах, через яке вміст вікна буде оновлюватися. У прикладі коштує 30 секунд.
Завантажити плагін з виправленим shoutbox.js . Демка працює за первісним варіантом, але ви можете легко протестувати оновлений скрипт у себе на сайті.

P.P.S виправляємо проблему букв "И" та "ш"
Я вирішив ці літери просто замінити на їх символи з "Таблиця символів Unicode". Знайдіть рядок case "insert": (66-а рядок) в файлі shoutbox.php і замініть вміст case на цей код: напишіть наступне правило:

$ Message \u003d str_replace ( "ш", "ш", $ _POST [ "message"]);
$ Message \u003d str_replace ( "І", "І", $ message);
$ Nick \u003d str_replace ( "ш", "ш", $ _POST [ "nick"]);
$ Nick \u003d str_replace ( "І", "І", $ nick);
echo insertMessage ($ nick, $ message);

Рішення досить просте: ми просто перед тим як нове повідомлення Додати в БД, замінюємо проблемні літери на них же, але в символьному варіанті


  • FalleN

  • 9225

  • 159

Written by Saran on April 23, 2013, Updated January 30, 2014

Facebook has this nice little chat box that doesn "t take up much space, and people can instantly interact with their friends, it is a cool feature to have in any website. Let" s get inspired and create an similar shoutbox which will look similar to Facebook chat box.

Style

Here "s the CSS, I" ve tried to make it look close as possible to Facebook chat box. Should work in Chrome, Firefox and ie8 +. Let me know if it requires some tweaking in other browsers.

Shout_box (background: # 627BAE; width: 260px; overflow: hidden; position: fixed; bottom: 0; right: 20%; z-index: 9;) .shout_box .header .close_btn (background: url (images / close_btn. png) no-repeat 0px 0px; float: right; width: 15px; height: 15px;) .shout_box .header .close_btn: hover (background: url (images / close_btn.png) no-repeat 0px -16px;) .shout_box .header .open_btn (background: url (images / close_btn.png) no-repeat 0px -32px; float: right; width: 15px; height: 15px;) .shout_box .header .open_btn: hover (background: url (images / close_btn.png) no-repeat 0px -48px;) .shout_box .header (padding: 5px 3px 5px 5px; font: 11px "lucida grande", tahoma, verdana, arial, sans-serif; font-weight: bold; color: #fff; border: 1px solid rgba (0, 39, 121, .76); border-bottom: none; cursor: pointer;) .shout_box .header: hover (background-color: # 627BAE;) .shout_box .message_box ( background: #FFFFFF; height: 200px; overflow: auto; border: 1px solid #CCC;) .shout_msg (margin-bottom: 10px; display: block; bord er-bottom: 1px solid # F3F3F3; padding: 0px 5px 5px 5px; font: 11px "lucida grande", tahoma, verdana, arial, sans-serif; color: # 7C7C7C; ) .Message_box: last-child (border-bottom: none;) time (font: 11px "lucida grande", tahoma, verdana, arial, sans-serif; font-weight: normal; float: right; color: # D5D5D5; ) .shout_msg .username (margin-bottom: 10px; margin-top: 10px;) .user_info input (width: 98%; height: 25px; border: 1px solid #CCC; border-top: none; padding: 3px 0px 0px 3px; font: 11px "lucida grande", tahoma, verdana, arial, sans-serif;) .shout_msg .username (font-weight: bold; display: block;)

Shout Box HTML

Have a look at Shout box markup, you can see username and message fields, also the div with "message_box" class attribute, where user messages are loaded from the database.

Saaraan Shout Box

jQuery

Using setInterval (), We will refresh chat every тисячу milliseconds, it sends ajax call to shout.php and loads returned data into the element, updating shout-box with any newly added message.

// automatically refresh after every 1000 milliseconds. load_data \u003d ( "fetch": 1); window.setInterval (function () ($ .post ( "shout.php", load_data, function (data) ($ ( ". message_box"). html (data); var scrolltoh \u003d $ ( ". message_box"). scrollHeight ; $ ( ". message_box"). scrollTop (scrolltoh);));) 1000);

When user writes something and hit enter key, we need to send entered data to shout.php. The keypress () method triggers when a button is pressed down, and (Evt.which \u003d\u003d 13) condition makes sure key pressed is Enter key, then we can proceed with ajax $ .Post () method, as shown in example below. You can replace keypress () with .click () method, but you need to add button in your HTML.

// method to trigger when user hits enter key $ ( "# shout_message"). Keypress (function (evt) (if (evt.which \u003d\u003d 13) (var iusername \u003d $ ( "# shout_username"). Val (); var imessage \u003d $ ( "# shout_message"). val (); post_data \u003d ( "username": iusername, "message": imessage); // send data to "shout.php" using jQuery $ .post () $. post ( "shout.php", post_data, function (data) (// append data into messagebox with jQuery fade effect! $ (data) .hide (). appendTo ( ". message_box"). fadeIn (); // keep scrolled to bottom of chat! var scrolltoh \u003d $ ( ". message_box"). scrollHeight; $ ( ". message_box"). scrollTop (scrolltoh); // reset value of message box $ ( "# shout_message"). val ( " ");)). fail (function (err) (// alert HTTP server error alert (err.statusText);));)));

Example below slides up or down shout box, when user clicks close or open icon.

// toggle hide / show shout box $ ( ". Close_btn"). Click (function (e) (// get CSS display state of .toggle_chat element var toggleState \u003d $ ( ". Toggle_chat"). Css ( "display") ; // toggle show / hide chat box $ ( ". toggle_chat"). slideToggle (); // use toggleState var to change close / open icon image if (toggleState \u003d\u003d "block") ($ ( ". header div" ) .attr ( "class", "open_btn");) else ($ ( ". header div"). attr ( "class", "close_btn");)));

PHP

Here "s PHP file shout.php, As you can see I have sanitized post variables using PHP filter_var (), And performed some MySQL query. Since I don "t want to grow this database table large, I am keeping only 10 recent rows in the database, everything else will be deleted. It is up to you to decide how many rows you want to keep.

0) (// sanitize user name and message received from chat box $ username \u003d filter_var (trim ($ _ POST [ "username"]), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH); $ message \u003d filter_var (trim ($ _ POST [ "message" ]), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH); $ user_ip \u003d $ _SERVER [ "REMOTE_ADDR"]; // insert new message in db if (mysqli_query ($ sql_con, "INSERT INTO shout_box (user, message, ip_address) value (" $ username "," $ message "," $ user_ip ")")) ($ msg_time \u003d date ( "h: i AM d", time ()); // current time // output message echo "

". $ Username."". $ Message."
";) // delete all records except last 10, if you don" t want to grow your db size! mysqli_query ($ sql_con, "DELETE FROM shout_box WHERE id NOT IN (SELECT * FROM (SELECT id FROM shout_box ORDER BY id DESC LIMIT 0, 10) as sb)"); ) Elseif ($ _ POST [ "fetch"] \u003d\u003d 1) (// Retrive last 10 messages from Database $ results \u003d mysqli_query ($ sql_con, "SELECT user, message, date_time FROM (select * from shout_box ORDER BY id DESC LIMIT 10 ) shout_box ORDER BY shout_box.id ASC "); while ($ row \u003d mysqli_fetch_array ($ results)) ($ msg_time \u003d date (" h: i AM d ", strtotime ($ row [" date_time "])); // message posted time // output messages echo "
". $ Row [" user "]." ". $ Row [" message "]."
";)) Else (// output error header (" HTTP / 1.1 500 Are you kiddin me? "); Exit ();))

That "s it! I hope this tutorial has helped you understand how shoutbox works and how we can make it look like Facebook chat box. By the way, I do want to see it working live in your website, so if you are using this example, please do share your links here and good luck!

In this tutorial, we are going to build a shout box with PHP and jQuery, which allows visitors of your website to leave short comments to one another. Shouts will be stored on the server as files, no database like MySQL will be required. We are going to use two PHP libraries to make things easier - Flywheel for storing the shouts as json files and RelativeTime for creating human readable relative time stamps. We will be using Composer to install these libraries.

On the client side, we are using plain jQuery code, and the Emoji One library, which is a free project and library for adding pretty emojis to web apps. Let "s begin!

Running the shoutbox

You can grab the source code from the download button above. It has plenty of comments and is easy to follow. To run it, simply upload it to your web hosting space or add it to the apache htdocs folder if you run something like XAMPP or MAMP. Then, open http: // localhost in your browser (or your website, if you uploaded it to your hosting space). Here are a few things to look for:

  • The zip files already contains the dependencies, so you don "t need to install Composer. This makes it easy to get started with the code - simply upload it and use it!
  • Make sure that the data / shouts directory exists and is writable. Otherwise you will see errors in your log file and no shouts will be stored. You might need to chmod it to 777 if you keep seeing errors.

The HTML

Let "s start with index.html. It is a regular HTML5 document, which includes our JavaScript libraries, scripts and stylesheets. Here are the parts relevant to the shoutbox:

index.html

Shout box

Write a message ×

With JavaScript we will insert the published shouts into the

    element. The form is hidden by default, and only revealed when the "Write a message" header is clicked.

    Shoutbox with PHP and jQuery

    The JavaScript Code

    And here is our script.js, which makes the above HTML work:

    assets / js / script.js

    $ (Function () (// Storing some elements in variables for a cleaner code base var refreshButton \u003d $ ( "h1 img"), shoutboxForm \u003d $ ( ". Shoutbox-form"), form \u003d shoutboxForm.find ( "form" ), closeForm \u003d shoutboxForm.find ( "h2 span"), nameElement \u003d form.find ( "# shoutbox-name"), commentElement \u003d form.find ( "# shoutbox-comment"), ul \u003d $ ( "ul.shoutbox -content "); // Replace :) with emoji icons: emojione.ascii \u003d true; // Load the comments. load (); // On form submit, if everything is filled in, publish the shout to the database var canPostComment \u003d true; form.submit (function (e) (e.preventDefault (); if (! canPostComment) return; var name \u003d nameElement.val (). trim (); var comment \u003d commentElement.val (). trim () ; if (name.length && comment.length && comment.length< 240) { publish(name, comment); // Prevent new shouts from being published canPostComment = false; // Allow a new comment to be posted after 5 seconds setTimeout(function(){ canPostComment = true; }, 5000); } }); // Toggle the visibility of the form. shoutboxForm.on("click", "h2", function(e){ if(form.is(":visible")) { formClose(); } else { formOpen(); } }); // Clicking on the REPLY button writes the name of the person you want to reply to into the textbox. ul.on("click", ".shoutbox-comment-reply", function(e){ var replyName = $(this).data("name"); formOpen(); commentElement.val("@"+replyName+" ").focus(); }); // Clicking the refresh button will force the load function var canReload = true; refreshButton.click(function(){ if(!canReload) return false; load(); canReload = false; // Allow additional reloads after 2 seconds setTimeout(function(){ canReload = true; }, 2000); }); // Automatically refresh the shouts every 20 seconds setInterval(load,20000); function formOpen(){ if(form.is(":visible")) return; form.slideDown(); closeForm.fadeIn(); } function formClose(){ if(!form.is(":visible")) return; form.slideUp(); closeForm.fadeOut(); } // Store the shout in the database function publish(name,comment){ $.post("publish.php", {name: name, comment: comment}, function(){ nameElement.val(""); commentElement.val(""); load(); }); } // Fetch the latest shouts function load(){ $.getJSON("./load.php", function(data) { appendComments(data); }); } // Render an array of shouts as HTML function appendComments(data) { ul.empty(); data.forEach(function(d){ ul.append("
  • "+ ""+ D.name +""+ "

    "+ Emojione.toImage (d.text) +"

    "+ "
    REPLY"+ ""+ D.timeAgo +"
    "+ "
  • "); }); } });

    The Emoji One library has version for both JavaScript and PHP. In the appendComments method, we use the emojione.toImage () function to convert all typed-out smileys into emoji. See all functions that are supported, and check out this handy emoji code website. Now that the frontend is ready, let "s move on to the backend.

    The PHP Code

    We have two files - publish.php and load.php. The first accepts a POST request for storing shouts in the data store, and the second returns the 20 latest shouts. These files are not opened directly by visitors - they only handle AJAX requests.

    publish.php

    new \\ JamesMoss \\ Flywheel \\ Formatter \\ JSON,)); $ Repo \u003d new \\ JamesMoss \\ Flywheel \\ Repository ( "shouts", $ config); // Store the posted shout data to the data store if (isset ($ _ POST [ "name"]) && isset ($ _ POST [ "comment"])) ($ name \u003d htmlspecialchars ($ _ POST [ "name"]); $ name \u003d str_replace (array ( "\\ n", "\\ r"), "", $ name); $ comment \u003d htmlspecialchars ($ _ POST [ "comment"]); $ comment \u003d str_replace (array ( "\\ n" , "\\ r"), "", $ comment); // Storing a new shout $ shout \u003d new \\ JamesMoss \\ Flywheel \\ Document (array ( "text" \u003d\u003e $ comment, "name" \u003d\u003e $ name, " createdAt "\u003d\u003e time ())); $ repo-\u003e store ($ shout);)

    With this our shoutbox is ready! You can embed it in your website, customize it and change the code any way you please. We hope you like it!

    WordPress - це зручна блог-платформа для публікації статей та управління ними, на якій базується величезна кількість різних сайтів. Через свою поширеності ця CMS вже давно є ласим шматком для зловмисників. На жаль, базові настройки не забезпечують достатнього рівня захисту, залишаючи багато дефолтні дірки незакритими. У цій статті ми пройдемо типовим шляхом «типового» злому сайту на WordPress, а також покажемо як усунути виявлені вразливості.

    Вступ

    На сьогоднішній день WordPress серед систем управління контентом найпопулярніші. Його частка становить 60,4% від загального числа сайтів, які використовують CMS-движки. З них, згідно зі статистикою, 67,3% сайтів базується на останній версії даного програмного забезпечення. Тим часом за дванадцять років існування веб-движка в ньому було виявлено 242 уразливості різного роду (без урахування вразливостей, знайдених в сторонніх плагінах і темах). А статистика сторонніх додатків виглядає ще сумніше. Так, компанія Revisium провела аналіз 2350 русифікованих шаблонів для WordPress, взятих з різних джерел. В результаті вони з'ясували, що більше половини (54%) виявилися зараженими веб-Шелл, бекдор, blackhat seo ( «спам») посиланнями, а також містили скрипти з критичними уразливими. Тому влаштовуйся зручніше, зараз ми будемо розбиратися, як провести аудит сайту на WordPress і усунути знайдені недоліки. Використовувати будемо версію 4.1 (русифіковану).

    індексування сайту

    Першим етапом будь-якого тесту зазвичай буває збір інформації про мету. І тут дуже часто допомагає неправильне налаштування індексування сайту, яка дозволяє неавторизованих користувачам переглядати вміст окремих розділів сайту і, наприклад, отримати інформацію про встановлені плагинах і темах, а також доступ до конфіденційних даних або резервних копій баз даних. Щоб перевірити, які директорії видно зовні, найпростіше скористатися Гуглом. Досить виконати запит Google Dorks типу site: example.com intitle: "index of" inurl: / wp-content /. В операторі inurl: можна вказати наступні директорії:

    / Wp-content / / wp-content / languages \u200b\u200b/ plugins / wp-content / languages \u200b\u200b/ themes / wp-content / plugins / / wp-content / themes / / wp-content / uploads /

    Якщо зможеш переглянути / wp-content / plugins /, наступний крок по збору інформації про встановлені плагинах і їх версіях значно спрощується. Природно, заборонити індексування можна за допомогою файлу robots.txt. Так як за замовчуванням він не включений в інсталяційний пакет WordPress, його необхідно створити самому і закинути в кореневу директорію сайту. Мінлива по створенню і роботі з файлом robots.txt досить багато, тому залишу цю тему для самопідготовки. Наведу лише один з можливих варіантів:

    User-Agent: * Disallow: / cgi-bin Disallow: /wp-login.php Disallow: / wp-admin / Disallow: / wp-includes / Disallow: / wp-content / Disallow: / wp-content / plugins / Disallow : / wp-content / themes / Disallow: /? author \u003d * Allow: /

    Якщо в файлах, що зберігаються в папці uploads, є відомості конфіденційного характеру, додаємо до цього списку рядок: Disallow: / wp-content / uploads /.
    З іншого боку, в файлі robots.txt не рекомендується розміщувати посилання на директорії, які були створені спеціально для зберігання чутливої \u200b\u200bінформації. Інакше цим самим ти полегшиш зловмисникові завдання, так як це перше місце, куди зазвичай все заглядають в пошуках «цікавенького».

    Визначення версії WordPress

    Ще один важливий крок - ідентифікація версії CMS. Інакше як підібрати підходящий сплоіт? Існує три швидких способу для визначення використовуваної на сайті версії WordPress:

    1. Знайти в вихідному коді сторінки. Вона вказана в метатеге generator:

      або ж в тегах :

    2. Знайти в файлі readme.html (рис. 1), який входить до складу інсталяційного пакета і знаходиться в корені сайту. Файл може мати й інші назви типу readme-ja.html.
    3. Знайти в файлі ru_RU.po (рис. 2), який входить до складу інсталяційного пакета і розташований за адресою / wp-content / languages \u200b\u200b/: "Project-Id-Version: WordPress 4.1.1 \\ n"

    Один з варіантів захисту в даному випадку - обмежити доступ до файлів readme.html і ru_RU.po з помощью.htaccess.

    Автоматизація процесу тестування

    Дослідженням безпеки WordPress зайнялися не вчора, тому існує достатня кількість інструментів, що дозволяють автоматизувати рутинні завдання.

    • визначення версії і теми за допомогою скрипта http-wordpress-info nmap -sV --script http-wordpress-info
    • підбір пароля за словниками nmap -p80 --script http-wordpress-brute --script-args "userdb \u003d users.txt, passdb \u003d passwords.txt" example.com
    • модуль для визначення версії: auxiliary / scanner / http / wordpress_scanner;
    • модуль для визначення імені користувача auxiliary / scanner / http / wordpress_login_enum.
    • перерахування встановлених плагінів: wpscan --url www.exmple.com --enumerate p;
    • перерахування встановлених тем: wpscan --url www.exmple.com --enumerate t;
    • перерахування встановленого timthumbs: wpscan --url www.example.com --enumerate tt;
    • визначення імені користувача: wpscan --url www.example.com --enumerate u;
    • підбір пароля за словником для користувача admin: wpscan --url www.example.com --wordlist wordlist.txt --username admin;
    • підбір пароля з використанням зв'язки ім'я користувача / пароль з числом потоків, рівним 50: wpscan --url www.example.com --wordlist wordlist.txt --threads 50.

    Визначення встановлених компонентів

    Тепер давай зберемо інформацію про встановлені плагинах і темах незалежно від того, активовані вони чи ні. Перш за все таку інформацію можна вивудити з вихідного коду HTML-сторінки, наприклад по JavaScript-посиланнях, з коментарів і ресурсів типу CSS, які завантажуються на сторінку. Це найпростіший спосіб отримання інформації про встановлені компонентах. Наприклад, рядки нижче вказують на використовувану тему twentyeleven:

    Так як інформація про плагіни не завжди відображається у вихідному коді HTML-сторінки, то виявити встановлені компоненти можна за допомогою утиліти WPScan (див. Врізку). Тільки не забувай, що перебір шляхів плагінів зафіксується в логах веб-сервера.
    Отримавши дані про встановлені компонентах, вже можна приступати до пошуку вразливостей своїми силами або знайти загальнодоступні експлойти на ресурсах типу rapid7 або exploit-db.

    Визначення імені користувачів

    За замовчуванням в WordPress кожному користувачеві привласнюється унікальний ідентифікатор, представлений у вигляді числа: example.com/?author\u003d1. Перебираючи числа, ти і визначиш імена користувачів сайту. Обліковий запис адміністратора admin, яка створюється в процесі установки WordPress, йде під номером 1, тому в якості захисного заходу рекомендується її видалити.

    Брутфорс wp-login

    Знаючи ім'я користувача, можна спробувати підібрати пароль до панелі адміністрування. Форма авторизації WordPress на сторінці wp-login.php дуже інформативна (рис. 3), особливо для зловмисника: при введенні неправильних даних з'являються підказки про невірне ім'я користувача або пароль для конкретного користувача. Розробникам відомо про цю особливість, але її вирішили залишити, так як подібні повідомлення зручні для користувачів, які могли забути свій логін і / або пароль. Проблему підбору пароля можна вирішити, використовуючи стійкий пароль, що складається з дванадцяти і більше символів і включає букви верхнього і нижнього регістра, числа і спецсимволи. Або ж, наприклад, за допомогою плагіна Login LockDown.

    заливаємо Shell

    Після того як ми сбрутіть пароль, ніщо не заважає залити шелл на скомпрометований веб-ресурс. Для цих цілей цілком згодиться фреймворк Weevely, який дозволяє генерувати шелл в обфусцірованном вигляді, що робить його виявлення досить складним. Щоб не викликати підозри, отриманий код можна вставити в будь-який файл теми (наприклад, в index.php) через редактор теми консолі WordPress. Після чого за допомогою того ж Weevely можна підключитися до машини жертви і викликати різні команди:

    Python weevely.py http: //test/index.php Pa $$ w0rd [+] weevely 3.1.0 [+] Target: test [+] Session: _weevely / sessions / test / index_0.session [+] Browse the filesystem or execute commands starts the connection [+] to the target. Type: help for more information. weevely\u003e: help

    Подключаем.htaccess

    Для заборони доступу до чутливої \u200b\u200bінформації краще скористатися файлом.htaccess - це файл конфігурації, який використовується в Apache Web Server. Розглянемо можливості цього файлу з точки зору безпеки. З його допомогою можна: заборонити доступ до тек і файлів, заблокувати різні SQL-ін'єкції і шкідливі скрипти. Для цього стандартний файл.htaccess для CMS WordPress 4.1 потрібно трохи розширити. Щоб закрити список файлів і папок, додаємо:

    Options + FollowSymLinks -Indexes

    RewriteCond% (QUERY_STRING) base64_encode [^ (] * \\ ([^)] * \\) заблокує посилання, що містять кодування Base64. Позбутися від посилань, що містять тег

    Звичайна форма з трьома input. Після форми йде div # container, нехай вас не бентежить наявність самотнього тега p. Всі повідомлення виводяться у вигляді

    Ім'я - повідомлення

    (Див. Файл shoutbox.php). І в кінці ми підключаємо jQuery і сам скрипт shoutbox.js (Можете це зробити і традиційно між тегами head)

    CSSтут відповідає тільки за зовнішній вигляд чату. Тому детально розглядати його в цьому уроці не будемо. Просто не забудьте включити стилі з файлу css / general.css на вашу сторінку, або, що ще краще, зробіть індивідуальний дизайн. Єдине що варто пам'ятати, id і class з наведеного вище коду використовує і скрипт shoutbox.js, Тому якщо ви будете змінювати імена id і class на свої, не забудьте зробити це також в shoutbox.js

    На сьогодні це все. Нехай цей урок стане для вас подарунком на першотравневі свята, думаю, цей міні-чат ви знайдете куди прилаштувати;)

    P.S. Для тих хто хоче з цього скрипта отримати більш повноцінний чат, злегка доопрацюємо оригінальний скрипт:

    Сенс в тому, що ми будемо оновлювати зміст віконця чату через певний час. Для цього нам знадобиться плагін, який суттєво спростить завдання jquery.timers.js. Його підключаємо як зазвичай, а в shoutbox.js додаємо наступні рядки:

    $ ( ". Content\u003e p"). EveryTime (30000, function () (
    $ .Ajax ((
    type: "POST", url: "shoutbox.php", data: "action \u003d update",
    complete: function (data) (
    loading.fadeOut ();
    messageList.html (data.responseText);
    messageList.fadeIn ( "fast");
    }
    });

    everyTime (30000) - час в мілісекундах, через яке вміст вікна буде оновлюватися. У прикладі коштує 30 секунд.
    Завантажити плагін з виправленим shoutbox.js. Демка працює за первісним варіантом, але ви можете легко протестувати оновлений скрипт у себе на сайті.

    P.P.S виправляємо проблему букв "И" та "ш"
    Я вирішив ці літери просто замінити на їх символи з "Таблиця символів Unicode". Знайдіть рядок case "insert": (66-а рядок) в файлі shoutbox.php і замініть вміст case на цей код: напишіть наступне правило:

    $ Message \u003d str_replace ( "ш", "ш", $ _POST [ "message"]); $ Message \u003d str_replace ( "І", "І", $ message); $ Nick \u003d str_replace ( "ш", "ш", $ _POST [ "nick"]); $ Nick \u003d str_replace ( "І", "І", $ nick); echo insertMessage ($ nick, $ message);

    Рішення досить просте: ми просто перед тим як нове повідомлення Додати в БД, замінюємо проблемні літери на них же, але в символьному варіанті