오늘부터 최대한 빠르게 써니나타스의 32개 문제를 풀어보려고 한다. Web 문제 비중이 많이 높은 편이다... 나는 시스템 해킹 문제 위주로 풀어서 웹에는 취약하기 때문에.. 참고용으로만 봐주시길..
1번 문제는 숨겨진 pw를 찾아내는 문제다. (참고로 이 페이지는 asp 파일로 된 소스 코드다.) 코드를 그대로 읽어보면, Request는 일단 클라이언트가 서버에게 뭔가를 요청할 때 주로 사용한다. 반대로 Response는 수신! str를 받았을 때 그게 ""이면.. Replace(str, "a", "aad")라고 적혀있는데, str에 a가 있으면 그걸 aad로 변환하고, result에는 i가 있으면 그 문자를 in으로 치환해버린다는 뜻이다. Mid는 처음본 함수라 검색해서 참고했다. result에서 2위치부터 2개 길이만큼 출력한다는 뜻이란다. Mid(result, 4, 6)이면 4번째 문자부터 6개 길이만큼 출력하는 것이다. 그리고 그렇게 나온 결과 result1 & result 2끼리 합쳐서 result에 저장한 뒤, Response.write result를 써줬다. Response.write는 문자열을 화면에 출력할 때 사용한다. 뒤에 result가 써있으니 result를 출력하고 싶은 것! 그리고 그 result가 admin일 때 비밀번호를 알려주는 것 같다.
여기서 중요한건 지금 result1이랑 result2의 결과를 합친 값이 result=admin이어야 하니까.. Mid(result,2,2)의 값을 ad로, Mid(result,4,6)은 min이 나오게 하면 될거 같다. (길이는 6이지만 min에서 그냥 끝나게) 근데 일단 위에서 str 값에 a가 들어가면 그걸 aad로 바꿔버린다고 했으니까 (그리고 그 값을 result에 넣어버리고..) str값에 a를 넣어주면 result에 aad가 들어가고, Mid(result,2 ,2)를 했을 때 result 값의 문자열 순서가 (a-1,a-2,d-3,, 참고로 순서는 1부터 시작!) 이렇게 되어 있으니, a-2인 a와 d-3의 d까지 총 두 개의 문자를 빼낼 수 있다. 그 다음으로 result에 i가 있으면 그 i를 in으로 바꿔버린다고 했고, result2=(Mid,4 ,6)이라고 했으니까, min이라는 세개의 문자를 출력하려면 m-4, i-5가 필수로 들어가야 한다. 만약에 ami만 넣으면, a->aad, i->in이니까 aadmin으로 result 값이 저장되고, 소스코드에 나온 함수대로 입력 받은 str은 a를 aad로 바꿔주고 result에 저장 (aadmi), 그 다음 result에 저장된 aadmi를 보고 i를 in으로 치환해 다시 result로 저장 (aadmin)한다. 다음 result1에선 result에서 2번째 위치한 문자부터 2 길이만큼, 즉 ad를 result1에 저장하고, result2에선 result의 4번째 문자열에 위치한 문자부터 6길이만큼, 즉 min(길이가 짧아서 6까지는 못 출력한걸로..?)를 가져오는 거니까 result1&result2를 했을 때 admin이 result 값으로 저장된다. admin이 맞으면 비밀번호를 반환..
ami를 입력했더니 문제 풀이에 성공했다.
비밀번호는 이렇게 맨 마지막에 뜬다.
써니나타스 1번 문제 핵심 키워드
- ASP 파일 (asp 언어는 문자열 시작이 0이 아니라 1부터..)
- Replace, Mid 함수
- Response.write
'CTF, 워게임 문제 풀이 > Suninatas' 카테고리의 다른 글
[Web] 써니나타스 Challenges 6번 문제 (0) | 2022.06.01 |
---|---|
[Web] 써니나타스 Challenges 5번 문제 (0) | 2022.05.31 |
[Web] 써니나타스 Challenges 4번 문제 (0) | 2022.05.30 |
[Web] 써니나타스 Challenges 3번 문제 (0) | 2022.05.29 |
[Web] 써니나타스 Challenges 2번 문제 (0) | 2022.05.28 |
댓글