우선 문제 페이지에 접속하면 아래와 같이 로그인을 할 수 있는 공간이 있다.
나는 아래 이미지와 같이 guest를 이름으로 하여 로그인을 진행하였다.
guest로 로그인 한 결과, 다음과 같이 guest로 로그인이 되며, '산타 사설 거래소'와 '드림 유동성 풀'이 생성된 것을 확인할 수 있다.
이후에는 더 확인할 수 없는 내용이 부족하여 소스코드를 확인해보았다. 소스코드를 통해 다음과 같은 부분을 알 수 있었다.
DHH이 1000 이상이고 빌린 DHH가 0 이면 flag를 획득할 수 있다. 문제에서 note 부분을 보면 음수의 값이 허용된다면 그 행동의 반대를 하게 된다고 적혀있다. 따라서 빚을 갚을 때 음수의 값을 써주면 되갚기가 가능하다는 것을 알 수 있다.
우선, 산타 사설 거래소에서 DHH를 1000 빌린 후 모두 드냥 코인으로 바꿀 수 있다.
다음으로 드림 유동성 풀에서 드냥 코인을 모두 담보로 변경해준다.
다음으로 DHD를 2000이상 빌릴 수 있다. 이때, 500씩 4번에 걸쳐서 2000을 빌려주어야 한다.
이후 다시 산타 사설 거래소에 가서 드멍 코인을 드핵코인으로 변경해주어야 한다.
다음으로 음수 값 즉, -1000을 입력하여 드핵코인의 빚을 갚을 수 있다.
남은 드멍코인을 드핵코인으로 바꿀경우 드핵코인은 1000이 되고 최종적으로 빌린 드핵코인도 0이 되어 플래그 버튼을 눌렀을 때 플래그를 획득할 수 있게된다.
문제 해결-!
이번 문제의 경우 다른 문제들과 달리 소스코드를 바탕으로 직접 입력값을 넣어 플래그 값을 얻어내는 과정이었기에 더욱 흥미로운 것 같다.
'CTF' 카테고리의 다른 글
[Webhacking.kr] old-17 (0) | 2024.05.29 |
---|---|
[Webhacking.kr] old-39 (0) | 2024.05.29 |
[Dreamhack] simple_sqli_chatgpt (0) | 2024.05.08 |
[Dreamhack] Addition calculator (0) | 2024.05.08 |
[CTFLearn] My Blog (0) | 2024.05.01 |