Yozzang의 해킹일기 💻
article thumbnail
Published 2023. 4. 7. 01:21
[DreamHack 워게임] funjs Wargame/DreamHack
728x90

오늘은 DreamHacker의 웹 해킹 워게임 중 하나인 funjs를 함께 풀어볼 예정이다.

 

 

 

funjs

Description 입력 폼에 데이터를 입력하여 맞으면 플래그, 틀리면 NOP !을 출력하는 HTML 페이지입니다. main 함수를 분석하여 올바른 입력 값을 찾아보세요 !

dreamhack.io


## 문제 설명:

문제 설명

문제 정보를 살펴보면 main 함수를 분석하여 flag를 획득하면 되는 것으로 보인다.

## 문제 풀이

사이트에 접속해보니 다음과 화면이 보인다.

main

위치가 계속 바뀌는 입력창이 나타난다. 소스 코드를 분석해보면 다음과 같은 함수가 존재한다.

소스 코드

우선 moveBox() 함수를 주석 처리하여 진행해보겠다. 이어서 소스 코드를 살펴 보면 다음과 같이 flag을 출력하기 전 두개의 조건문이 존재한다.

첫 번째 조건문은 flag[_0x374fd6(0x17c)]의 값이 0x24와 다르면 NOP!과 함께 return된 것을 확인할 수 있다. 즉, flag[_0x374fd6(0x17c)]의 값이 0x24와 같게 만들어야 한다.

개발자 도구

입력창에 1234을 입력하고 개발자 도구를 활용하여 값을 출력해보니 위와 같이 4가 나왔고 1234567을 입력하고 출력해보니 7이 나온 것을 활용할 수 있다. 즉, 문자열의 길이가 0x24인 것을 확인할 수 있다. 파일이 주어졌으므로 "!="을 "=="로 변경하여 계속 진행하겠다.

 

이어서 두번째 조건을 확인해보면 flag[_0x374fd6(0x17c)]가 입력한 문자열의 길이이므로 길이만큼 반복문을 실행하는 것을 확인할 수 있다. flag[_0x374fd6(0x176)](i)와 특정 값을 반복 비교하고 다른 것이 하나라도 발생하면 NOP!과 함께 return 된다. 즉 비교하는 "특정 값"이 flag라는 것을 유추해볼 수 있다.

 

다음과 같이 간단한 script를 통해 FLAG를 출력할 수 있다

성공

profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!