1번 문제는 웹해킹 문제로, ASP의 코드를 확인하고, pw 값을 도출해내는 문제이다.
처음 문제에 들어가면, Check를 할 수 있는 입력칸과 현재 ASP의 코드로 보이는 것들이 적혀있다.
그림 1에서 대충 코드를 읽어보면
특정한 과정을 거친 result값이 admin이어야 pw를 획득 할 수 있는 것으로 보인다.
우선 눈에 보이는 객체, 메소드들부터 정리를 해보자
- Request
그림 2의 설명을 참고하면 Request(변수 이름)과 같이 호출을 했을 경우,
QueryString(GET 메소드의 파라미터) -> Form(POST 메소드의 파라미터) -> 쿠키값 -> 클라이언트 인증 -> 서버 변수 순으로 값을 탐색한다고 한다.
즉, 그림 1에서의 Request 객체는 GET이나 POST에 상관 없이, str 값을 찾아 str 변수에 전달한다.
- Replace
다른 언어에서 흔히 사용되는 replace 함수와 같이
Replace(변수명, 변경할려는 문자열, 새로 바꿀 문자열)
과 같이 사용되는 것으로 보이며
그림 1에서는 a를 찾아 aad로 변경하고, 그 다음은 i를 찾아 in으로 변경하는 것으로 보인다.
예시로, admin을 입력했다고 가정하면 aadminn과 같이 출력이 된다.
- Mid
문자열을 자르는 함수다.
Mid(문자열, 시작점, 길이)
와 같이 사용된다.
이때 시작점은 문자열의 첫 문자를 기준으로 1부터 시작하며, 길이는 시작점을 기준으로 얼마만큼의 문자를 뽑아올지를 결정한다.
예시로, Mid("abcdef", 2, 2)는 bc를 반환한다.
- & 연산자
두 개의 문자열을 더하는 연산자이다.
"abc" & "def" 는 "abcdef"를 반환한다.
그림 1에서 필요한 값을 도출하기 위해서는 아래쪽에서부터 역순으로 거슬러 올라가보도록 한다.
우선 제일 아래 result 값부터 확인을 해보자
result 값이 admin이 되어야 하며, 이 result값은 result1과 result2가 서로 더해진 값이다.
즉, "admin" = result1 + result2이다.
result1은 result의 2번째 문자부터 2글자를 뽑아낸 문자열이고, result2는 result의 4번째 문자부터 6글자를 뽑아낸 문자열이다.
이를 시각화하면 다음과 같다.
abcdefghi (result1 result2)
때문에 admin을 만들기 위해서는 result값이
aadmin
이어야 한다.
* Mid 함수는 시작점 + 길이값이 문자열의 길이보다 긴 경우, 문자열의 끝까지만 반환한다. 이때 시작점 값이 문자열 길이보다 긴 경우, "" 와 같이 빈 문자열을 반환하게 된다.
a는 aad가 되고, i는 in이 되므로 ami만 입력한다면
ami -> aadmi -> aadmin
과 같은 과정을 통해 원하는 문자열을 만들어 낼 수 있게 된다.
그림 6과 같이 ami를 입력하고 check를 누른다.
그림 7과 같이 축하 메시지가 뜨더니
그림 8과 같이 Flag를 획득 할 수 있다.
따라서, Flag는 k09rsogjorejv934u592oi 이다.
앞으로 어떻게 문제들이 진행되고 인증을 하면 되는 것인지 알려주는 정말 간단한 문제였다고 할 수 있다.
'Wargaming > SuNiNaTaS' 카테고리의 다른 글
[ SuNiNaTaS ] Game 02 (0) | 2022.03.06 |
---|