웹 해킹 문제를 푸는데 Flask 사용법을 몰라 문제를 풀 때 한참 헤멨다.

Flask 사용법을 점차 익혀야겠다.

 

 

 

문제 페이지 소스코드

Flask 에서 처리하기 전에 먼저 html 소스에서 <form><input> 에 보면 name 이라는 속성이 있다.

이 name의 속성 값이 중요하다.

클라이언트에서 서버로 데이터를 전송할 때 이름과 값의 쌍이 전송이 되는데 이 형태는 key 와 value로 표현이 될 수 있다.

그래서 <input type="text" name="xss"> 에서 xss 이라고 하는 것이 key가 되고  이 텍스트 박스에서 입력된 내용은 value가 된다.

 

 

app.py

@라고 되어있는 부분은 파이썬에서 데코레이터(decorator)라고 부르며, 이를 사용하여 app의 객체의 route 함수에 request 인자를 넘기면서 HTTP 요청을 처리한다.

request는 보통 get, post 방식으로 넘어온 데이터를 처리할 때 필요하다.

사실 "request"는 서버 측에서 요청한다는 의미. 즉, 사용자가 서버로 보내오는 요청이나 데이터를 얻어내는 역할을 하는 것이 이 request 객체의 역할이다.

GET 방식으로 요청 파라미터를 가져오려면 request 객체의 args 함수를 호출하면 된다.

POST 방식으로 요청 파라미터를 가져오려면 request 객체의 form 함수를 호출하면 된다.

+ get 함수의 첫 번째 인자는 요청 파라미터명, 두 번째 인자는 해당 요청 파라미터가 없을 시의 초기값이다.

 

밑의 함수는 @app.route 데코레이터 URL과 자신을 연결한다.

 

저기에서 '/'로 요청(request)을 하면 (즉 http://127.0.0.1/(생략가능) 여기로 접속하면) index() 함수가 실행된다는 것이다.

 

** HTTP 요청 방식

클라이언트에서 웹 서버로 요청할 때 어떤 방식으로 데이터를 전달할 것인지를 정한다. 

GET 서버로부터 정보를 조회 또는 요청(데이터를 Body에 담지 않고 URL에 쿼리스트링을 통해 전송)
가장 일반적인 요청 방식
* 쿼리스트링: URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터 (파라미터가 여러 개이면 &로 연결)
HEAD GET 요청으로 반환될 데이터 중 헤더 부분에 해당하는 데이터만 요청
POST 클라이언트에서 서버로 처리할 수 있는 데이터를 보냄(데이터를 HTTP 메세지의 Body에 담아서 전송)
보통 HTML 폼을 통해 데이터를 전송
PUT 클라이언트가 서버에게 지정한 URL에 지정한 데이터를 저장할 것을 요청. POST와 유사
DELETE 클라이언트가 서버에게 지정한 URL의 정보를 제거할 것을 요청
OPTIONS 해당 URL에서 지원하는 request method를 알려줌

 

 

'WEB > WEB Hacking' 카테고리의 다른 글

Dreamhack | 워게임 | <csrf-1> 문제  (0) 2021.01.26
Client-side Attack  (0) 2021.01.25
Dreamhack | 워게임 | <xss-1> 문제  (0) 2021.01.23
웹 해킹 기초  (0) 2021.01.23
Dreamhack | 워게임 | <simple_sqli>문제  (0) 2020.11.19

+ Recent posts