-
Dreamhack - baby-unionwargame/Dreamhack 2025. 6. 15. 10:11
[LEVEL 1 - baby-union - web]
이 문제는 union을 사용한 SQL Injection 문제이다.
문제 설명에 로그인 시 계정의 정보가 출력되는 웹 서비스라고 나와있다.
문제 환경에 접속하면 위와 같이 나온다.
app.py 코드를 보면 입력을 받은 후 계정의 정보를 조회하는 쿼리문을 만들어 DB에 전송하고 응답값을 출력하고 있다.
특히 20번째 줄을 보면 입력값을 바로 쿼리문에 넣고 있기 때문에 SQL Injection 공격이 가능하다는 것을 알 수 있다.
init.sql 코드는 위와 같은데, 해당 테이블명과 컬럼명은 실제 이름과 다르다고 문제 설명에 나와있다.
4개의 컬럼인 것을 알 수 있어 union을 이용해 쿼리문을 작성하면 된다.
flag가 있을만한 테이블을 찾아내기 위해 DB 구조와 속성에 대해 알 수 있는 information_schema를 사용해 아래와 같이 쿼리문을 작성할 수 있다.
apple'union select table_name,2,3,4 from information_schema.tables #
그러면 이렇게 해당 DB의 테이블을 확인할 수 있는데, 맨 아래에 있는 onlyflag 테이블에 플래그가 있을 것 같다.
이제 앞서 사용한 쿼리문에서 아래와 같이 일부 수정해 onlyflag 테이블의 컬럼 정보를 확인할 수 있다.
apple'union select column_name,2,3,4 from information_schema.columns where table_name='onlyflag'#
위와 같이 onlyflag 테이블의 컬럼 정보가 나온다.
idx와 sname은 id와 name을 나타내는 것 같아 일단 svalue, sflag, sclose를 확인해 본다.
이때 3번 자리는 확인이 불가하니, 아래와 같이 1, 2, 4번에 위치시킨 후 확인한다.
apple'union select svalue,sflag,3,sclose from onlyflag#
바로 플래그값이 출력된 것을 볼 수 있다.
플래그를 획득했다!
'wargame > Dreamhack' 카테고리의 다른 글
Dreamhack - what-is-my-ip (0) 2025.05.04 Dreamhack - Type c-j (2) 2025.05.04 Dreamhack - out of money (0) 2025.04.27 Dreamhack - command-injection-chatgpt (0) 2025.04.27 Dreamhack - simple_sqli_chatgpt (0) 2025.04.21