※ CTF - Capture The Flag
※ 문제 푸는 방법이 다양할 수도 있습니다.
1. 주어진 정보 : 계정 하나 (ID / PW : doldol / dol1234), 목표는 관리자 계정으로 로그인인데 관리자 계정을 모른다..!
2. 정상 로그인해서 과정 살펴보기.
→ Burp Suite로 보았으나 특별한 점은 보이지 않았다.
2. 방법 구상하기
→ SQL injection 시도
→ ID입력란에 doldol'# PW입력란에 1 로그인이 된다.
→ 식별 인증 동시인 것 같고 ID만 알면 로그인이 가능하다.
→ 하지만 ID를 모른다.
→ 무차별은 아니고.. 반차별(?) 대입을 해본다.
→ ID입력란에 1' or id like 'a%'# PW는 아무거나.. 1 입력한다.
→ a에 a부터 z까지, 그리고 0부터 9까지 해본다.
→ (아마 설정된 데이터 셋이 대소문자를 구분하지 않는 것 같다.)
→ id는 5로 시작하는 것 같다. 1' or id like '5%'#
4.성공
5.값 알아내기
→ like를 써서 5로 시작하는 14자리 id인 걸 알아냈다.
→ 약간의 노가다로 알아낸 관리자 ID는 5ecret_acc0unt 이다.
→ 비밀번호를 알아보자
→ 알아보기전 SQL inject으로 테이블 구조를 한 번 더 확인해준다.
→ ID입력란에 doldol' and pass='dol1234'#를 입력하고 PW에 1를 넣으면 로그인이 된다.
→ ID입력란에 doldol' and pass='1'#을 입력하고 PW에 1을 넣으면 로그인이 안된다.
→ and가 먹히고, 컬럼에 pass가 존재한다.
→ 무적의 like를 써준다. 5ecret_acc0unt' and pass like '%'# PW에 아무거나 입력해도 로그인이 된다.
→ 시간을 아끼고자 5ecret_acc0unt' and pass like '_________________'# 로 17자 인것을 알아내고
→ 시간을 아끼고자 5ecret_acc0unt' and pass like '%a%'# 로 들어가는 문자를 찾는다.
→ e,f,g,h,i,j,k,q,w,3,8이 들어가는 것을 알아 냈다.
→ 해보니 PW는 gjijfweijfiqwh38h이다.
6.다른 방법 생각해보기
→ SQL 인젝션이 통하고, PW는 몰라도 되니까, 모든 ID리스트에서 하나하나 대입해보면 될 것 같다.
→ id를 or true를 사용해 모든 튜플을 가져오고, SQL 끝단에 limit 1 offset 0#을 넣어서 오프셋을 하나씩 늘려주면 될 것이다.
Segfault CTF - (6주 차) SQL Injection 2 (0) | 2024.05.27 |
---|---|
Segfault CTF - (6주 차) SQL Injection 1 (0) | 2024.05.27 |
Segfault CTF - (5주 차) Login Bypass 5 (0) | 2024.05.21 |
Segfault CTF - (5주 차) Login Bypass 4 (0) | 2024.05.21 |
Segfault CTF - (5주 차) Login Bypass 3 (0) | 2024.05.21 |