random-test

- (1) 사물함 번호는 알파벳 소문자 혹은 숫자를 포함하는 4자리 랜덤 문자열
- (2) 비밀번호는 100 이상 200 이하의 랜덤 정수
소스코드 분석
app.py
- 앞서 문제 설명에서 사물함 번호는 알파벳 소문자 혹은 숫자를 포함하는 4자리 랜덤 문자열임을 알 수 있었는데요. 사물함 번호(locker_num)에 사용될 수 있는 문자는
abcdefghijklmnopqrstuvwxyz0123456789총 36개이고 4자리 랜덤 문자열이므로 경우의 수는 36^4 (1,679,616)개 가 됩니다. - 1,679,616개는 충분히 브루트포스 공격을 해 볼만한 수이죠?

- 저는 버프스위트 프로페쇼날이 있기 때문에.. 도-구를 사용해서 진행해보겠습니다.
- (와다다다다ㅏ 브루트포스 공격중입니다.)
- 라고 생각을 했는데, 큰 오산이었습니다. 생각보다 큰 수입니다.

- 다시 코드를 살펴보니 굳이 4자리 랜덤 문자열을 사용할 필요는 없는 것 같습니다.
rand_str[0:len(locker_num)이므로 입력한 값의 자릿수 만큼만 비교할 수 있습니다.- 음,
locker_num값으로 1자리 값만 입력하면 맨 앞 첫 글자만 같은지 비교하는거죠.
- 음,
- 그러니 1,679,616개의 시도가 아니라, 36번의 시도한 해보면 됩니다.
- 쨘, "l" 문자를 입력하니 `Good` 응답이 출력됐습니다. ![[C9X8S7D6A5ST6WA9-dfb67yd089b67s890dd09b67ys0978-20251103213945635.png]]
- 2번째 조건문은 조금 더 까다롭습니다.
- (1) 이번에는
locker_num값이 정확하게 랜덤 문자열 4개와 일치해야 하고, - (2) 패스워드도 100~200 중 일치하는 값을 찾아야 합니다.

rand_str값은 1글자씩 순차적으로 찾아주면 됩니다.- 1번째 값은 “l” 이었으니, 2번째 값을 찾고,
- 2번째 값 찾으면 3번째 값을 찾고, 이후 4번째 값을 찾는 방식입니다.

locker_num값은lt4j였습니다. 패스워드도 브루트 포스로 구해보겠습니다.- (lt4j / 156)
- 플래그 획득에 성공했습니다.

🐛.. 🐛.. 🐛..
Reference
- None