wargame/Dreamhack
-
Dreamhack - [wargame.kr] login filteringwargame/Dreamhack 2025. 4. 13. 22:29
[LEVEL 1 - login filtering - web] php와 mysql의 차이를 알면 쉽게 풀 수 있는 로그인 우회 문제이다. 문제 환경에 접속하면 위와 같이 로그인 화면이 나온다. get source를 눌러 소스코드를 살펴보면 맨 아래에 주석으로 block된 아이디/비번이 2개 적혀있다. 그대로 guest / guest를 넣어본 결과 예상대로 block되었다는 메시지가 출력된다.사실 php 필터링에 guest가 걸리지 않으면 되고, mysql은 쿼리에서 대소문자를 구별하지 않는다.그래서 이번에는 아이디를 Guest로 첫 글자 하나만 바꿔서 php 필터링을 우회하면서 mysql 상에서는 정상적으로 처리되도록 해보자. 위와 같이 바로 로그인 필터링이 우회되어 플래그값이 출력된다..
-
Dreamhack - [wargame.kr] type confusionwargame/Dreamhack 2025. 3. 17. 22:25
[LEVEL 1 - type confusion - web] 문제 파일은 다운로드 받지 않아도 된다. 문제 환경에 접속하면 위와 같이 나온다. view-source를 누르면 위와 같이 나온다.여기서 알 수 있는 점은 php의 느슨한 비교 "==" 취약점을 이용해야 한다는 점이다.즉, 값이 서로 같지 않더라도 결과가 true가 될 수 있다는 뜻이다. (ex. true == 문자열)따라서 조건문의 json->key로 true를 보내면 된다. 개발자도구로 util.js를 보면 위와 같이 submit()가 보이는데 key: key를 key: true로 바꾸고 아무값이나 넣은 후 check를 누르면 된다. 예상대로 위와 같이 플래그값이 출력된 걸 볼 수 있다. 플래그를 획득했다!
-
Dreamhack - mongoboardwargame/Dreamhack 2025. 3. 17. 22:03
[LEVEL 1 - mongoboard - web] node와 mongodb로 구성된 게시판이 주어진다.비밀 게시글을 읽어 FLAG를 획득하라고 되어있다.MongoDB FLAG만 no가 없으며, 해당 게시글을 누르면 위와 같이 alert 창이 뜬다. 개발자도구의 네트워크 탭을 열어보면 위와 같이 JSON형식의 데이터를 넘겨준 서버 주소가 api/board인 것을 볼 수 있다. 첫 번째 글을 들어간 후, 내용을 API 서버로부터 넘겨 받으려면 /api/board/no으로 넘겨줘야 한다는 것을 알게 되었다.FLAG 게시글은 no가 없다.이제 mongodb에서 _id가 어떻게 생성되는지 알아내야 한다. https://www.mongodb.com/ko-kr/docs/manual/refer..
-
Dreamhack - Simple Patch Mewargame/Dreamhack 2024. 11. 26. 12:06
[LEVEL 1 - Simple Patch Me - reversing] 실제 시간으로 365일이 지나면 플래그를 출력하는 프로그램이 주어진다.프로그램을 패치하여 플래그를 획득하라고 되어있다. 일단 ida로 열어보면 main함수가 위와 같이 나온다.위 프로그램은 8760시간(365*24)이 지나지 않으면 1시간동안 sleep하고, 그 후 변수가 1 증가한다. dword_40404C를 8760으로 바꾸거나 sleep(0)으로 바꾸면 플래그를 얻을 수 있을 것으로 보인다.플래그를 출력하는 함수로 들어가본다. 개인적으로 그냥 궁금해서 __readfsqword() 함수가 뭔지 찾아보았다. https://learn.microsoft.com/ko-kr/cpp/intrinsics/readfsbyte..
-
Dreamhack - [wargame.kr] strcmpwargame/Dreamhack 2024. 11. 13. 14:11
[LEVEL 1 - strcmp - web] strcmp 함수를 우회하면 플래그를 얻을 수 있는 문제이다. 문제 환경에 접속하면 위와 같이 나온다. view-source를 클릭해보면 위와 같은 코드를 볼 수 있다. php 관련해 알고 있는 취약점이 없어서 구글링을 통해 알아본 결과 특정 버전의 php에서 strcmp()의 인자값으로 배열을 넣으면 NULL이 반환된다고 한다.또한 php는 NULL과 0을 ==로 비교할 때 True를 반환한다고 한다. 따라서 위의 하이라이트된 password 부분을 password[]과 같이 배열로 수정한다. 이제 chk 누르면 바로 위와 같이 플래그가 나온다. 플래그를 획득했다!
-
Dreamhack - [wargame.kr] fly me to the moonwargame/Dreamhack 2024. 11. 13. 14:01
[LEVEL 1 - fly me to the moon - web] 이 문제는 자바스크립트로 구현된 게임이 주어진다. 문제 환경에 접속하면 위와 같은 화면이 나온다. 게임이 종료될 때마다 개발자 도구의 네트워크 탭에서 high-scores.php가 생기는 걸 볼 수 있다.token.php는 10초마다 생겨난다.그리고 이 게임은 31337점에 도달해야함을 알 수 있다. 위는 burpsuite로 문제 환경에 접속한 후 게임이 종료되는 순간의 모습이다. 우클릭해서 send to repeater한 화면이다.score값을 목표값인 31337로 바꿔주고 send를 누르면 우측과 같이 Congratulations와 함께 플래그가 나온다. 플래그를 획득했다!
-
Dreamhack - php-1wargame/Dreamhack 2024. 11. 5. 21:57
[LEVEL 1 - php-1 - web] php로 작성된 Back Office 서비스에서 LFI 취약점을 이용해 플래그를 획득할 수 있고, 플래그는 /var/www/uploads/flag.php에 있다고 한다. 25번째 줄을 보면 따로 page는 따로 필터링하고 있는게 없다. list.php 내용이다. 여긴 필요한 정보는 없다. 여기서는 flag, : 필터링에 걸리면 Permission denied가 뜰 것이다. 문제 환경에 접속한 화면이다. List에 flag.php랑 hello.json이 있는데 flag.php는 앞서 코드에서 미리 본 것처럼 Permission denied가 뜬다. 즉, 공격 페이로드를 아무리 넣어도 필터링에 걸린다는 뜻이다. 필터링이 없는 메인..
-
Dreamhack - simple-sstiwargame/Dreamhack 2024. 11. 5. 21:32
[LEVEL 1 - simple-ssti - web] 존재하지 않는 페이지 방문 시 404 에러를 출력하는 서비스에서 SSTI 취약점을 이용해 플래그를 획득해야 한다. 문제에서 주어진 app.py이다.render_template_string()로 인해 템플릿 구문이 해석되어서 SSTI 취약점이 발생할 수 있다는 점을 인지하고 일단 문제 환경으로 접속한다. 문제 환경에 접속하면 위와 같이 나온다. 404Error 페이지에 들어왔는데 이렇게 뜨길래 Jinja Template에서 자주 쓰이는 공격 페이로드 중 {{config}}를 사용해본다. 바로 플래그값을 바로 확인할 수 있다. 플래그를 획득했다!