도카이트

[Wargame] Webhacking.kr - old 50 본문

Wargame/Webhacking.kr

[Wargame] Webhacking.kr - old 50

dodoh4t 2022. 6. 20. 23:31
728x90
반응형

문제 화면

[old 50 - 문제 화면]

- SQL Injection 문제이다. 최초 접속 시 id와 pw에 guest 값이 입력되어 있다.

- 소스 코드를 확인해보도록 하자 !

 

 

소스 코드

[old 50 - 소스 코드]

- id와 pw 값에 대해 addslashes 함수가 적용되어 있으며,

- mb_convert_encoding 함수를 통해 id 값에 대해 euc-kr 을 utf-8 형식으로 인코딩한다.

- 또한 from과 pw, \, 공백, %, = 에 대해 preg_match 함수를 통해 필터링하고 있으며,

- id 값에 대해 union 문자열을 대소문자 구별 없이 필터링하고 있다.

- $result 의 lv 값이 3 이 되면 문제가 solve 되는 방식이다.

- lv 칼럼값을 출력하는 쿼리문이므로, union select를 이용해 lv이 3이 되도록 구문을 작성하면 될 듯 하다.

 

 

실행되는 쿼리 구문을 살펴보았을 때, id=’/* and pw=md5(’*/union select 3#’ 을 입력하여,

lv이 3인 값을 출력하도록 유도하면 될 듯 하다. id 값에 싱글 쿼터와 주석의 시작 부분을 삽입하기에,

이후 and pw=md5(’ 부분 까지는 주석화가 되며, pw 값에 대해서는 union 문자열에 대한 필터링이

없으므로, union select 를 사용하여 값을 출력하게 유도해보자 !

 

 

주석 구문을 이용한 SQL Injection

[주석 구문을 이용한 SQL Injection]

- 위 예제에서 사용한 구문에 대한 설명은 다음과 같다.

- ?id=%a1’/*&pw=*/union select 3#

- id 값에 입력된 싱클 쿼터 이후 /* 주석을 통해 pw 값까지의 쿼리 구문을 주석화 시킨다.

- 싱글 쿼터 앞에 입력된 %a1 에 대해 아마 궁금한 점이 있을 것이다..

 

EUC-KR을 UTF-8로 인코딩 변환 시, addslashes 함수 우회 가능 취약점

PHP 에서 멀티 바이트 문자(%a1~%fe) 처리 시 멀티 바이트 문자 뒤에 \ 가 존재하는 경우,

하나의 문자로 처리가 되는 문제가 있다. 즉 addslashes 함수로 인해 삽입된 \ 앞에 의도적으로

멀티 바이트 문자를 삽입하면 \ 를 하나의 문자로 인식하여 무효화되어 addslashes 함수를 우회할 수 있다.

 

- 다시, SQL Injection 공격에 사용할 구문을 URL 인코딩 하여 작성한다.

- URL 인코딩 된 SQL Injection 페이로드는 다음과 같다.

- ?id=%a1%27%2F%2A&pw=%2A%2Funion%09select%093%23

- 공백에 대한 필터링의 경우 %09 (Tab) 을 이용하여 우회한다.

- 페이로드 작성 후 페이지 이동 시, 성공적으로 문제를 solve 할 수 있다 !

728x90

'Wargame > Webhacking.kr' 카테고리의 다른 글

[Wargame] Webhacking.kr - old 54  (0) 2022.06.20
[Wargame] Webhacking.kr - old 51  (0) 2022.06.20
[Wargame] Webhacking.kr - old 34  (0) 2022.06.20
[Wargame] Webhacking.kr - old 33  (0) 2022.06.20
[Wargame] Webhacking.kr - old 32  (0) 2022.06.20
Comments