Проверка на стороне клиента
В этой главе мы узнаем, как проверка помогает при пентестинге Python.
Основная цель проверки - проверить и убедиться, что пользователь предоставил необходимую и правильно отформатированную информацию, необходимую для успешного выполнения операции.
Есть два разных типа проверки -
- проверка на стороне клиента (веб-браузер)
- проверка на стороне сервера
Проверка на стороне сервера и проверка на стороне клиента
Проверка пользовательского ввода, которая происходит на стороне сервера во время сеанса обратной передачи, называется server-side validation. Такие языки, как PHP и ASP.Net, используют проверку на стороне сервера. После завершения процесса проверки на стороне сервера обратная связь отправляется обратно клиенту путем создания новой динамической веб-страницы. С помощью проверки на стороне сервера мы можем получить защиту от злонамеренных пользователей.
С другой стороны, проверка вводимых пользователем данных, которая происходит на стороне клиента, называется проверкой на стороне клиента. Языки сценариев, такие как JavaScript и VBScript, используются дляclient-side validation. В этом виде проверки все действия, вводимые пользователем, выполняются только в браузере пользователя. Это не так безопасно, как проверка на стороне сервера, потому что хакер может легко обойти наш язык сценариев на стороне клиента и отправить опасный ввод на сервер.
Настройка параметров на стороне клиента: обход проверки
Передача параметров в протоколе HTTP может осуществляться с помощью методов POST и GET. GET используется для запроса данных из указанного ресурса, а POST используется для отправки данных на сервер для создания или обновления ресурса. Одно из основных различий между обоими этими методами заключается в том, что если веб-сайт использует метод GET, то передаваемые параметры отображаются в URL-адресе, и мы можем изменить этот параметр и передать его веб-серверу. Например, строка запроса (пары имя / значение) отправляется в URL-адресе запроса GET:/test/hello_form.php?name1 = value1&name2 = value2. С другой стороны, при использовании метода POST параметры не отображаются. Данные, отправленные на сервер с помощью POST, хранятся в теле запроса HTTP-запроса. Например, POST/test/hello_form.php HTTP/1.1 Host: ‘URL’ name1 = value1&name2 = value2.
Модуль Python для обхода проверки
Модуль Python, который мы собираемся использовать, это mechanize. Это веб-браузер Python, который предоставляет возможность получения веб-форм на веб-странице, а также облегчает отправку входных значений. С помощью Mechanize мы можем обойти параметры проверки и корректировки на стороне клиента. Однако, прежде чем импортировать его в наш скрипт Python, нам необходимо установить его, выполнив следующую команду -
pip install mechanize
пример
Ниже приведен сценарий Python, в котором для обхода проверки веб-формы с помощью метода POST для передачи параметра используется механизация. Веб-форму можно взять по ссылкеhttps://www.tutorialspoint.com/php/php_validation_example.htm и может использоваться на любом фиктивном веб-сайте по вашему выбору.
Для начала импортируем браузер Mechanize -
import mechanize
Теперь мы создадим объект с именем brwsr браузера Mechanize -
brwsr = mechanize.Browser()
Следующая строка кода показывает, что пользовательский агент не является роботом.
brwsr.set_handle_robots( False )
Теперь нам нужно предоставить URL-адрес нашего фиктивного веб-сайта, содержащего веб-форму, на которой нам нужно обойти проверку.
url = input("Enter URL ")
Теперь следующие строки установят для некоторых родителей значение true.
brwsr.set_handle_equiv(True)
brwsr.set_handle_gzip(True)
brwsr.set_handle_redirect(True)
brwsr.set_handle_referer(True)
Затем он откроет веб-страницу и распечатает веб-форму на этой странице.
brwsr.open(url)
for form in brwsr.forms():
print form
Следующая строка кодов будет обходить проверки в указанных полях.
brwsr.select_form(nr = 0)
brwsr.form['name'] = ''
brwsr.form['gender'] = ''
brwsr.submit()
Последнюю часть скрипта можно изменить в соответствии с полями веб-формы, в которых мы хотим обойти проверку. Здесь, в приведенном выше скрипте, мы взяли два поля -‘name’ и ‘gender’ который нельзя оставить пустым (вы можете увидеть в коде веб-формы), но этот скрипт обойдет эту проверку.