먼저 문제를 확인해보면 다음과 같은 화면이 나왔다.
문제는 생각보다 간단해보이는데 코드에서 사용된 함수가 무엇인지 헷갈려서 조금 감이 안왔던것 같다.
문제 페이지의 소스를 확인해보니 asp 파일이어서 asp 파일의 함수에 대해 찾아보았다.
Replace 함수
- 변수에 포함된 문자열을 다른 문자열로 변경할 때 사용
- 사용 방법 : Replace(변수, "변경대상문자열", "변경할문자열")
Mid 함수
- 변수의 값을 잘라낼 문자열의 시작과 잘라낼 문자열의 개수를 정하여 사용
- 사용 방법 : Mid(변수, 시작, 잘라낼 개수)
따라서 관련 함수들에 대한 정보를 바탕으로 해당 문제를 요약해보자면 여러 과정을 거쳐서 최종적으로 result 라는 변수 값에는 admin이라는 값이 들어가게 된다는 것이다.
그럼 아래서부터 천천히 거슬러 올라가보자
result 변수의 값이 admin이 되려면 result = result1 & reult2 구문에서 result1과 result2는 각각 admin을 나눠 가지고 있어야하는데 이때 admin의 순서를 무시하는 것이 아닌 연속된 순서로 가지고 있어야 한다.
(ex. result1 = adm / result2 = in)
다음 부분은 result1, 2 변수에 대한 Mid 함수가 나오는데 우선, result1 변수는 result 변수 값의 2번째 자리부터 2개를 잘라내고 result2 변수는 result 변수 값의 4번째 자리부터 2개를 잘라낸다. 여기서 중요하게 볼 점은 result1은 값이 2개이고 result2는 값이 3개라는 점이다. 따라서 result1 = ad, result2 = min으로 볼 수 있다.
지금까지 부분을 확인해보면 resul1, 2 변수들은 result 변수에서 잘라온 것이므로
result = _ _admin
으로 볼 수 있다.
Replace 함수가 사용된 위 두 부분을 보면 str 변수에 a 값을 aad로 변경하고 이를 result 변수에 넣는다. 이후 result 변수 값에서 i를 in으로 변경한다. 이 부분을 통해 result는 aadmin
따라서 초기 값인 str 변수의 값은 ami 임을 찾을 수 있다.
찾은 값을 입력하고 check 버튼을 누르면
아래 알림창과 함께
키 값을 얻을 수 있었고
최종적으로 위에서 얻은 키값으로 문제 해결!!
해당 문제와 관련하여 예시도 함께 제시하여 풀이하신 분이 있어서 링크를 첨부한다.
'CTF' 카테고리의 다른 글
[Dreamhack] simple-ssti (0) | 2023.05.21 |
---|---|
[Dreamhack] dreamhack-tools-cyberchef (0) | 2023.05.13 |
[Dreamhack] error based sql injection (1) | 2023.05.10 |
[Dreamhack] [wargame.kr] login filtering (0) | 2023.05.03 |
[Dreamhack] session-basic (0) | 2023.05.02 |