문제 설명
로그인 서비스입니다.
SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다.
*참고 사항 : 이번 문제는 Dreamhack 학습의 Web Hacking의 SQL Injection 파트를 읽으면서 풀었다.
사이트 접속해 보니까 사진과 같은 로그인하는 기능만 있었다.
코드 확인
우선 database.db 파일로 데이터베이스를 관리하고 있는 것을 확인할 수 있다.
데이터 베이스의 구조 : 테이블 형식이고 아래와 같다.
userid | userpassword |
guest | guest |
admin | 랜덤 16바이트 문자열을 Hex 형태로 표현(32 바이트) |
GET : userid와 userpassword를 입력할 수 있는 페이지 제공.
POST : 데이터베이스에 입력한 정보가 존재하는지 확인.
if userid == 'admin'을 보면, 로그인한 계정이 admin인 경우 flag 값을 출력하는 것을 확인할 수 있다.
res = query_db('...중략...')을 보면 query_db 함수를 불러온다.
query_db 함수 : get_db() 함수를 이용해 연결된 데이터베이스에 쿼리문(중략된 SELECT * from...부분) 질의. rv에 쿼리문 내용을 받아옴. 쿼리 질의 내용에 대한 결과 반환.
그럼 password 적는 란에 명령어 입력해 주면 될 것 같다.
password 적는 란에만 주석처리하거나 여러 시도를 해보았더니
이렇게 오류가 났다. 그래서 강의를 보니까 id와 password 모두에 쿼리문 조작을 하는 거였다.
userid가 admin이고, password와 상관없이 로그인하기 위해 주석 처리를 해주기로 했다.
userid에 admin" -- 입력하고, password에는 임의의 값을 입력했다. 그랬더니 로그인이 되면서
플래그 값이 나왔다.
느낀점 : 쿼리문에 대해서 어느 정도 알아야 할 것 같음.. 문법 같은 것이 부족하니 강의를 보고 어떤 형식으로 문제를 풀어야겠다는 아이디어는 떠올랐는데, 푸는 것에 어려움을 겪었다.
개인 공부 목적으로 작성된 글이며, 틀린 정보나 해석이 있을 수 있음.
https://dreamhack.io/wargame/challenges/24/
simple_sqli
로그인 서비스입니다. SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. Reference Server-side Basic
dreamhack.io
'소학회 > 워게임' 카테고리의 다른 글
[reversing]Dreamhack_rev-basic-0 (0) | 2025.03.31 |
---|---|
[web]Dreamhack_csrf-2 (0) | 2025.02.04 |
[web]Dreamhack_csrf-1 (0) | 2025.02.04 |
[web]Dreamhack_xss-2 (0) | 2025.01.28 |
[web]Dreamhack_xss-1 (0) | 2025.01.28 |