728x90
반응형

400점인 52번 문제를 풀어보자.

guest 계정으로 로그인하게 되면 다음과 같은 페이지가 뜬다.

문제에서는 $_SESSION['login'] == "admin"이고, $_SERVER['REMOTE_ADDR']의 ip주소가 172.17.0.으로 시작한다면 flag값을 얻을 수 있게 된다.

그러나 해당 문제에서는 HTTP Basic Authentication 취약점을 이용하여 문제를 해결할 것이다.

우선, 웹 인증에 대한 내용과 종류를 알아야 한다.
- 웹 인증이란?

웹에 접근하는 사용자가 허가 받은 사용자인지 확인 하기 위해 사용하는 인증 방법으로서, 주로 사용자를 확인할 때 ID/PW를 이용하여 인증한다.

- 웹 인증 종류

1) Basic Authentication

기본 인증

웹 서버에 보낼 아이디와 암호를 Base64 방식으로 인코딩 후 전달

사용자 계정은 시스템 계정(Server user ID/PW) 이용

2) HTTP NTLM Authentication

윈도우 통합인증

Explore와 IIS에서만 사용가능(제한적)

호환성을 위해 웹 인증에 NTLM은 사용되지 않음

3) HTTP Digest Authentication

Windows의 경우 Domain 계정을 이용하여 인증

MD5 Hash 값 이용

4) Anonymous Authentication

익명 인증

Web Server에서 제공하는 익명 계정을 이용하여 서버의 자원을 클라이언트에게 제공

사용자는 웹 사이트에 접속하면 인증절차 없이 접속이 가능하다

(관리자가 미리 인증한 상태)

5) Form Based Authentication

HTML Form 태그를 이용하여 인증 정보를 서버 측에 전송

Form 태그로 ID/PW를 입력하는 로그인 창을 생성

대부분의 웹 어플리케이션에서 사용하는 방식

SSL(port 443)을 이용한 암호화가 필요함

 

이제 공격 구문을 작성해 보자. request 헤더에 인증정보를 injection 할 것이다. 각 줄의 구분은 CRLF(%0d%0a)를 사용한다.

Authorization 헤더에 admin으로 인증우회하기 위해 base64 인코딩 한다.

Authorization:%20Basic%20YWRtaW4%3d%0d%0a

그 후 쿠키값과 http 버전(HTTP/1.1)을 담아줄 임시 헤더값을 넣어준다.

그리고 URL에 page파라미터에 전달하게 되면 FLAG값을 확인할 수 있다.

 

최종 url : page=/admin/%20HTTP/1.1%0d%0aAuthorization:%20Basic%20YWRtaW4%3d%0d%0aCookie:%20PHPSESSID=세션 값%0d%0atemp:%20

 

FLAG 값 : FLAG{Server_Side_Request_Forgery_with_proxy!}

 

Auth 페이지에 FLAG 값을 제출해보자.

 

728x90
반응형

'CTF & WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] 54번 문제  (0) 2020.03.16
[webhacking.kr] 53번 문제  (0) 2020.03.16
[webhacking.kr] 51번 문제  (0) 2020.03.15
[webhacking.kr] 50번 문제  (0) 2020.03.15
[webhacking.kr] 49번 문제  (0) 2020.03.15

+ Recent posts