본문 바로가기

Wargame & CTF

[Dreamhack] baby-union

이번 문제는 MySQL에서 Union을 이용해서 쿼리를 구성하고 이를 이용해서 데이터를 알아낼 수 있는지 물어보는 문제였던 것 같습니다.

 

기본적으로 UNION문을 사용할 때는

' union select all 1,2,3# 

과 같은 형태를 사용하여 출력하는 열의 갯수를 정확히 알고있어야 합니다. 따라서 이를 시도해보기 위해서 프록시 도구를 이용하였습니다.

 

컬럼 갯수가 맞지 않을때 반응

 

컬럼 갯수가 맞을 때의 반응

 

즉, 컬럼 개수가 참이 되었기 때문에 결과를 확인할 수 있었습니다.

 

이후 테이블 명을 각각 알아내기 위해서 다른 쿼리를 작성하여 해결을 시도합니다.

'union+select+all+1,2,3,table_name+from+information_schema.tables# 

네번째 컬럼에서 테이블 명을 추출해서 보여주도록 하는 쿼리 입니다.

 

이후 해당 쿼리를 넣고 테이블 명을 확인하면 아래와 같습니다.

 

다만 위의 방식으로 확인하였을 때는 정답의 근거가 되는 플래그를 찾을 수 없습니다. 따라서 정답을 찾기 위해서는 웹 페이지에서 쿼리를 직접 입력해야합니다.

 

해당 플래그가 되는 테이블을 이용해서 컬럼명을 출력해 보겠습니다.

'union+select+all+1,2,3,column_name+from+information_schema.columns+where+table_name='onlyflag'#

해당 쿼리를 이용하여 각 컬럼명들을 확인합니다. 확인 결과는 아래와 같습니다.

 

이제 이를 통해서 정보를 얻었기 때문에 일반적인 조회문을 이용하여 플래그를 획득합니다. 이 때 concat을 사용해서 쿼리를 붙여서 출력해도 좋고 그냥 출력해도 좋습니다.

'union+select+all+1,2,3,concat(svalue,sflag,sclose)+from+onlyflag#

해당 쿼리를 이용하여 답을 알아낼 수 있습니다.

 

이상입니다.

'Wargame & CTF' 카테고리의 다른 글

[Portswigger] Path traversal  (0) 2023.12.22
[Dreamhack] Addition calculator  (1) 2023.12.21
[Webhacking.kr] 1,3,14,15,17번  (1) 2023.12.21
[Dreamhack] baseb64  (0) 2023.12.20
Uncrackable 1  (0) 2023.09.25