분류 전체보기
-
Dreamhack - CSRF Advancedwargame/Dreamhack 2026. 1. 2. 08:31
[LEVEL 1 - CSRF Advanced - web] 문제 환경에 접속하면 위와 같은 웹페이지가 나온다. 먼저 문제 파일 다운로드를 통해 얻은 app.py를 살펴보자. index()를 보아, admin으로 로그인하면 플래그값을 볼 수 있을 것이다.vuln()를 보아, 대소문자 우회를 막는 필터링까지 하고 있는 것을 알 수 있다. 하지만 img 태그에 대한 필터링은 없다.flag()를 보아, good이 나와야 한다.login()를 보아, 로그인에 성공하면 세션과 csrf 토큰이 주어질 것이다. 그런데 csrf 토큰이 일회성도 아니고, 어떻게 만들어지는지 쉽게 알 수 있다.change_password()를 보아, csrf 토큰값과 바꾸려는 비밀번호를 같이 넣으면 admin의 비밀번호를 바꿀 ..
-
Network Forensics Puzzle contest - Puzzle #1: Ann's Bad AIMwargame/Network Forensics Puzzle contest 2025. 12. 31. 15:21
[Puzzle #1: Ann's Bad AIM - forensics] 고전적인 네트워크포렌식 문제이다. https://forensicscontest.com/2009/09/25/puzzle-1-anns-bad-aim Puzzle #1: Ann’s Bad AIM – Network Forensics Puzzle ContestAnarchy-R-Us, Inc. suspects that one of their employees, Ann Dercover, is really a secret agent working for their competitor. Ann has access to the company’s prize asset, the secret recipe. Security staff are worried t..
-
Dreamhack - baby-unionwargame/Dreamhack 2025. 6. 15. 10:11
[LEVEL 1 - baby-union - web] 이 문제는 union을 사용한 SQL Injection 문제이다.문제 설명에 로그인 시 계정의 정보가 출력되는 웹 서비스라고 나와있다. 문제 환경에 접속하면 위와 같이 나온다. app.py 코드를 보면 입력을 받은 후 계정의 정보를 조회하는 쿼리문을 만들어 DB에 전송하고 응답값을 출력하고 있다.특히 20번째 줄을 보면 입력값을 바로 쿼리문에 넣고 있기 때문에 SQL Injection 공격이 가능하다는 것을 알 수 있다. init.sql 코드는 위와 같은데, 해당 테이블명과 컬럼명은 실제 이름과 다르다고 문제 설명에 나와있다.4개의 컬럼인 것을 알 수 있어 union을 이용해 쿼리문을 작성하면 된다. flag가 있을만한 테이블을 찾아내..
-
Dreamhack - what-is-my-ipwargame/Dreamhack 2025. 5. 4. 23:43
[LEVEL 1 - what-is-my-ip - web] 문제 설명에 /flag에 플래그 값이 있다고 힌트가 주어졌다. 문제 환경에 접속하면 가장 먼저 위와 같이 나의 IP 주소를 보여준다. 문제 파일을 다운로드 받으면 위와 같은 app.py가 있다.request.access_route에서 1번째 요소를 변수 user_ip에 저장하고 없으면 request.remote_addr를 저장한다. 그러면 request.access_route는 뭘까?Flask에서 request.access_route는 "전달된 헤더가 있는 경우 이는 클라이언트 IP에서 마지막 프록시 서버까지의 모든 IP 주소 목록"이다.아래 문서를 참고했다.https://flask.palletsprojects.com/en/stable/a..
-
Dreamhack - Type c-jwargame/Dreamhack 2025. 5. 4. 23:03
[LEVEL 1 - Type c-j - web] 문제 환경에 접속하면 위와 같이 나온다. 문제 파일을 다운로드 받으면 위와 같이 check.php 코드가 있다.여기서 알 수 있는 사실은 pw는 8자리이며, 1이라는 문자열을 sha1으로 암호화한 값이다.반면 id는 랜덤 문자열 10자리인데, 자세히 보면 (int)$input_id == $id 이 조건문에서 input_id를 가져와 int 형변환을 해주고 있는 것을 볼 수 있다.php 비교 연산자 취약점에 의해 input_id가 문자열로 시작하면 0이 되고, 숫자가 먼저 오면 먼저 온 숫자까지의 값으로 변환한다.따라서 id는 0으로 10자리를 모두 채워주면 되는 것이다. dreamhack cyberchef 페이지에서 1을 sha1으로 암호화한..
-
Dreamhack - out of moneywargame/Dreamhack 2025. 4. 27. 23:44
[LEVEL 1 - out of money - web, misc] 무에서 유를 창조하라는 문제이다.음수의 값이 허용된다면 그 행동의 반대를 하게 된다고 적혀있다.문제 환경에 접속하면 위와 같이 나온다. guest로 로그인했더니 위와 같이 나왔는데, 먼저 산타 사설 거래소에서 돈을 빌려야겠다. 본격적으로 빌리기 전에 문제 파일에서 제공된 소스코드의 주요 부분을 살펴보았다.DHH가 1000이상이면서, 빌린 DHH이 0일 때, Flag 구매 버튼을 누를 수 있는 것으로 보인다. 일단 돈이 없으니까 DHH을 빌려야 한다. 1000 DHH을 먼저 빌렸다.그러고 나서 밑부분에 1000 DHH를 DHC로 바꿨다. 산타 사설 거래소에서 나와 드림 유동성 풀로 이동했다. 그냥 바로 DHD를 ..
-
Dreamhack - command-injection-chatgptwargame/Dreamhack 2025. 4. 27. 23:24
[LEVEL 1 - command-injection-chatgpt - web] command injection으로 플래그를 획득하는 간단한 문제이며, 플래그는 flag.py에 있다고 한다. 문제 환경에 접속하면 위와 같이 나온다. ping을 날릴 수 있는 페이지가 있다. 문제 파일을 다운로드 받으면 위와 같은 코드를 볼 수 있는데, 딱히 필터링하고 있는 게 없어서 한 문장에 두 개의 명령어를 작성할 수 있는 세미콜론(;)을 이용하면 될 것 같다. 위와 같이 예시에 있던 8.8.8.8 그대로 치고 세미콜론(;)을 붙여준 다음, 바로 cat 명령어를 사용했다. 바로 플래그값이 출력된 것을 볼 수 있다. 플래그를 획득했다!
-
Dreamhack - simple_sqli_chatgptwargame/Dreamhack 2025. 4. 21. 22:29
[LEVEL 1 - simple-sqli-chatgpt - web] sql injection 문제인데 chatgpt랑 같이 풀어보라고 되어있다. 문제 환경에 접속하면 위와 나온다. login 페이지로 가본다. 문제 파일을 다운로드 받으면 위와 같은 app.py가 있다.여기서 초반 부분을 보면 users 테이블에 admin보다 guest를 먼저 넣는다는 걸 알 수 있다.그래서 흔히들 아는 'or'1'='1 같은 건 사용할 수 없다.그러면 union select를 사용하면 어떨까?' union select * from users;-- -위의 코드는 guest와 admin을 둘다 반환하지만, 기본이 오름차순이라 userid가 더 먼저인 admin이 먼저 나오게 되어 admin으로 로그인을 할 수..