-
random-test개인공부/드림핵 2025. 1. 18. 00:29
이번 문제의 경우 알파벳 소문자 혹은 숫자를 포함하는 4자리 랜덤 문자열 및 100 이상 200 이하의 랜덤 정수 비밀번호, 즉 두 값을 맞게 입력하여 FLAG를 획득하는 문제이다.
[문제 해결]
1. 서버 접속
접속 시 사물함 번호, 자물쇠 비밀번호 두 값을 입력해야 하는 것을 알 수 있다.
이때 랜덤 값 두개를 입력 후 확인 시 아래와 같은 결과를 확인 할 수 있다.
문제 파일을 분석해본다.
2. 문제 파일 분석
1번
- locker_num 및 password 파라미터에 입력된 값을 locker_num, password 변수에 저장한다
2번
- 조건문으로 조건 충족 여부를 확인한다
- 조건은 다음과 같다:
1. locker_num 변수가 빈 값이고
2. rand_str 배열에 랜덤하게 생성되어 대입된 값과 locker_num 변수의 값과 비교
- 이때 취약한 코드를 확인 할 수 있다
- rand_str[0:len(locker_num)]
- rand_str 변수의 0번 인덱스 값부터 len(locker_num) 즉 locker_num 변수의 길이 만큼 값을 추출후 비교한다
- 이말은 즉슨, 랜덤으로 생성된 4자리 문자열이 "f9h7"이고 입력된 locker_num 값이 "f" 일 경우 rand_str[0:len(locker_num)] = rand_str[0:1]로 인해 "f" == "f"가 되어 True가 반환된다
- rand_str 변수의 0번 인덱스 값부터 len(locker_num) 즉 locker_num 변수의 길이 만큼 값을 추출후 비교한다
3번
- 조건문을 통해 입력된 값들과 랜덤 값들이 같은지 확인
이때 2번의 취약 코드를 이용하여 FLAG 획득을 시도한다.
3. Exploit
FLAG를 획득하였다.
'개인공부 > 드림핵' 카테고리의 다른 글
amocafe (0) 2025.02.12 Type c-j (0) 2025.01.04 baby-union (0) 2025.01.02 BypassIF (0) 2025.01.01 what-is-my-ip (0) 2024.12.31