wargame/Dreamhack
-
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으로 로그인을 할 수..
-
Dreamhack - XSS Filtering Bypasswargame/Dreamhack 2025. 4. 21. 22:09
[LEVEL 1 - XSS Filtering Bypass - web] XSS Filtering한 걸 우회하는 웹해킹 문제이다. 문제 환경에 접속하면 위와 같이 나온다. 문제 파일을 다운로드 받고 app.py를 열어보았는데 주목해야 하는 부분은 위의 xss_filter 함수이다.문자열 script랑 on이랑 javascript:를 필터링하고 있다. /flag 엔드포인트로 가보면 위와 같이 나오는데, 여기서 페이로드를 작성해야 한다. 앞서 살펴본 필터링 문자열을 우회하기 위해 script 태그는 script 사이에 script를 끼워넣어서 중간꺼만 ""로 바뀌게 해서 최종적으로 script가 되도록 해야 한다.location은 "on"에 필터링이 되면 안되므로 "locatio"과 "n"으..
-
Dreamhack - [wargame.kr] tmitterwargame/Dreamhack 2025. 4. 13. 22:45
[LEVEL 1 - tmitter - web] 문제 환경에 접속하면 위와 같이 로그인과 회원가입을 할 수 있는 버튼이 있다. 로그인 버튼을 누르면 좌측 상단에 조그맣게 로그인할 수 있는 폼이 생긴다. 회원가입 버튼을 누르면 위와 같은 페이지가 나오는데, id는 최소 4자, ps는 최소 7자라고 되어있다. admin1이라는 아이디로 일단 회원가입을 하고 접속해봤다. hi hello라고 글을 써봤는데, 위에 admin이라는 계정이 남겨놓은 글이 보인다. 자기 id로 로그인 할 수 있냐고 적혀있다. 개발자도구를 열어서 소스코드를 봐도 맨 아래 주석으로 admin 계정으로 회원가입을 해야한다는 힌트가 나와있다.그리고 소스코드에 char형 id의 maxlength가 32바이트로 되어..