클라이언트 측 유효성 검사

이 장에서는 유효성 검사가 Python Pentesting에서 어떻게 도움이되는지 알아 봅니다.

유효성 검사의 주요 목표는 사용자가 작업을 성공적으로 완료하는 데 필요한 필수적이고 적절한 형식의 정보를 제공했는지 테스트하고 확인하는 것입니다.

유효성 검사에는 두 가지 유형이 있습니다.

  • 클라이언트 측 유효성 검사 (웹 브라우저)
  • 서버 측 유효성 검사

서버 측 검증 및 클라이언트 측 검증

포스트 백 세션 동안 서버 측에서 발생하는 사용자 입력 유효성 검사가 호출됩니다. server-side validation. PHP 및 ASP.Net과 같은 언어는 서버 측 유효성 검사를 사용합니다. 서버 측의 유효성 검사 프로세스가 끝나면 새 동적 웹 페이지를 생성하여 피드백이 클라이언트로 다시 전송됩니다. 서버 측 유효성 검사를 통해 악의적 인 사용자로부터 보호 할 수 있습니다.

반면에 클라이언트 측에서 발생하는 사용자 입력 유효성 검사를 클라이언트 측 유효성 검사라고합니다. JavaScript 및 VBScript와 같은 스크립팅 언어는client-side validation. 이러한 종류의 유효성 검사에서 모든 사용자 입력 유효성 검사는 사용자 브라우저에서만 수행됩니다. 해커가 클라이언트 측 스크립팅 언어를 쉽게 우회하고 위험한 입력을 서버에 제출할 수 있기 때문에 서버 측 유효성 검사와 같이 안전하지 않습니다.

클라이언트 측 매개 변수 조정 : 유효성 검사 우회

HTTP 프로토콜에서 매개 변수 전달은 POST 및 GET 메소드를 사용하여 수행 할 수 있습니다. GET은 지정된 리소스에서 데이터를 요청하는 데 사용되며 POST는 리소스를 생성하거나 업데이트하기 위해 서버로 데이터를 보내는 데 사용됩니다. 이 두 방법의 주요 차이점은 웹 사이트가 GET 메서드를 사용하는 경우 전달 매개 변수가 URL에 표시되고이 매개 변수를 변경하여 웹 서버에 전달할 수 있다는 것입니다. 예를 들어 쿼리 문자열 (이름 / 값 쌍)은 GET 요청의 URL로 전송됩니다./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 모듈

우리가 사용할 파이썬 모듈은 mechanize. 웹 페이지에서 웹 양식을 얻는 기능을 제공하고 입력 값의 제출도 용이하게하는 Python 웹 브라우저입니다. 기계화의 도움으로 유효성 검사를 우회하고 클라이언트 측 매개 변수를 조정할 수 있습니다. 그러나 Python 스크립트로 가져 오기 전에 다음 명령을 실행하여 설치해야합니다.

pip install mechanize

다음은 mechanize를 사용하여 POST 메서드를 사용하여 매개 변수를 전달하는 웹 양식의 유효성 검사를 우회하는 Python 스크립트입니다. 웹 양식은 링크에서 가져올 수 있습니다.https://www.tutorialspoint.com/php/php_validation_example.htm 원하는 모든 더미 웹 사이트에서 사용할 수 있습니다.

우선 기계화 브라우저를 가져 오겠습니다.

import mechanize

이제 우리는 brwsr 기계화 브라우저의-

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’ 비워 둘 수는 없지만 (웹 양식의 코딩에서 볼 수 있음)이 스크립트는 해당 유효성 검사를 우회합니다.