모의해킹 스터디 중 CTF 문제에 대한 풀이 과정을 서술하며, 문제에 도달하는 과정을 이해하기 위한 목적으로 작성.
Login Bypass2
<목차>
사이트 분석
1. 주어진 로그인 키를 활용하여 사이트 동작 방식을 확인한다.
▶ 로그인 패킷에서 확인되는 점
- POST 방식으로 입력된 아이디와 비밀번호를 전달한다.
- POST 로 보낸 데이터를 어떠한 SQL 쿼리를 거쳐 GET 방식으로 전달 및 인증되고 있다.
- SQL 인젝션이 가능한지, 확인해보자!
SQL Injection
1. 주어진 doldol 아이디로 기본 SQL 인젝션 시도
- UserId : doldol' AND '1'='1
- Password : dol1234
▶ 결과 : 로그인 성공
- 로그인 질의 Query문을 아래와 같이 생각할 수 있다.
- 기본 SQL 인젝션이 가능하다면, OR로 Password 확인을 건너뛸 수 있는지 확인이 필요하다.
SELECT * FROM users WHERE UserId = 'doldol' AND '1'='1' AND Password = 'dol1234';
2. 로그인해야 하는 normaltic2 아이디로 OR문을 시도해보자
- UserId : normaltic' OR '1'='1
- Password : anything
▶ 결과 : 로그인 실패
- 로그인 질의 Query문을 아래와 같이 생각할 수 있다.
- 아래 구문은, OR '1'='1' 조건 때문에 전체 쿼리가 참으로 평가되어, 비밀번호를 확인하지 않고 normaltic2 계정으로 로그인될 수 있다.
▶ 실패 사유 분석
- OR 1=1은 항상 참이므로, 이 부분은 무조건 참이 되며, 비밀번호를 확인하지 않는다.
- 하지만 이 구문으로 로그인을 실패했기에, 비밀번호를 확인하지 않더라도 쿼리의 나머지 부분이 영향받는다 유추할 수 있다.
- 만약 주석이 올바르게 해석되지 않거나 추가적인 필터링이 있는 경우, 쿼리가 올바르게 작동하지 않을 수 있다.
SELECT * FROM users WHERE UserId = 'normaltic2' OR '1'='1' AND Password = 'anything';
3. 만약 올바른 비밀번호를 입력 시, OR문은 작동할까?
- UserId : doldol' OR '1'='1
- Password : dol1234
▶ 결과 : 로그인 실패
- 비밀번호가 일치하더라도, 쿼리 구문의 어떠한 부분에서 OR 문의 작동이 막힌 것을 알 수 있다.
로그인 우회 : 주석
1. 주석을 사용하여, UserId 만으로 인증을 시도해보자
- UserId: normaltic2' --
- URL encoding ID : normaltic2%27+--+
- Password: anything
▶ 결과 : 로그인 성공
- 주석(--)을 사용하여 Password 조건을 무시하게 만들어, UserId 조건만으로 쿼리가 실행된다.
- UserId 값만 맞으면, 비밀번호를 검증하지 않고 로그인할 수 있다.
SELECT * FROM users WHERE UserId = 'normaltic2' -- ' AND Password = 'anything';
'IT 성장기 (교육이수) > CTF 문제풀이' 카테고리의 다른 글
[모의해킹 CTF] Login Bypass 3 (0) | 2024.05.26 |
---|---|
[모의해킹 CTF] Login Bypass5 (0) | 2024.05.21 |
[모의해킹 CTF] Pin Code Crack (0) | 2024.05.21 |
[모의해킹 CTF] Secret Login (0) | 2024.05.20 |
[모의해킹 CTF] Admin is Mine (0) | 2024.05.19 |