wargame/Dreamhack
-
Dreamhack - Secure Mailwargame/Dreamhack 2024. 8. 4. 23:58
[LEVEL 1 - Secure Mail - reversing] 문제파일을 다운로드 받으면 html 파일이 하나 있는데, 비밀번호 생년월일 6자리를 알아내면 플래그값을 알 수 있는 문제다. 일단 vs code로 열어서 소스코드 내용을 확인해본다. 보니까 생년월일 비번 제출하는 Confirm 버튼에 onclick()으로 0x9a220함수가 있는데 이걸 Ctrl+F로 검색해본다. 위쪽에 이 함수가 사용되는 것을 볼 수 있다. 그런데 이 코드를 다 해석하는 건 비효율적으로 보인다. 브루트포싱이 나을 것 같다. html태그 나오기 바로 전에 script태그 끝나는 부분이 있었는데 여기에 보면 틀릴 때마다 wrong을 alert창으로 띄우는 걸 볼 수 있다. 브루트포싱할 때마다 alert창이 ..
-
Dreamhack - rev-basic-8wargame/Dreamhack 2024. 7. 23. 22:13
[LEVEL 1 - rev-basic-8 - reversing] 1단계 문제 중에서는 rev-basic 시리즈 마지막 문제다. 메인함수 ida로 디컴파일하면 이전 문제들과 동일하게 생겼다. -5가 좀 이상해 보여서 커서 올려놓고 h 눌러서 헥스값으로 바꿔본다. 그러면 0xFB가 나오는데 이건 251이다.rev-basic-4 문제와 개념적으로 조금 비슷한 문제인 것 같다. byte_140003000을 더블클릭해서 어떤 데이터가 들어있는지 확인한다. Hex View탭으로 가서 복사해오기 이전 문제들과 다르게 헷갈리는 부분이 있어서 드림핵 해당 문제 커뮤니티 페이지에 있는 댓글을 참고했고, 위와 같이 코드를 작성하기 위해 짚고 넘어가야 할 것은 아래와 같다. 16진수 바이트로 표현..
-
Dreamhack - rev-basic-6wargame/Dreamhack 2024. 7. 23. 20:19
[LEVEL 1 - rev-basic-6 - reversing] 이 문제도 마찬가지로 입력값이 맞으면 Correct, 틀리면 Wrong을 출력하는 프로그램이 주어진다. 메인함수를 ida로 디컴파일한 모습이다. 이 함수를 참고해서 역으로 입력값이 무엇이 되어야 하는지 계산해야 한다.조건문 안에 있는 문장을 해석해 보면, 결국 아래를 만족하는 a1을 찾아야 한다.byte_140003020[a1] == byte_140003000[i] 먼저 byte_140003000을 들어가면 위와 같은 데이터를 볼 수 있다. 다음으로, byte_140003020을 들어가면 위와 같은 데이터를 볼 수 있다. ida의 Hex View 탭에서 그대로 복사할 수 있다. vs code에 붙여넣은 다음, 열..
-
Dreamhack - simple-operationwargame/Dreamhack 2024. 7. 17. 20:36
[Beginner - simple-operation - reversing] 일단 문제 파일을 다운로드 받으면 chall과 flag 이렇게 두 개의 파일이 있다. chall 파일을 ida로 열면 위와 같이 main()을 디컴파일 할 수 있다.여기서 알 수 있는 것은 랜덤값과 사용자의 입력값을 xor연산한 후, 이것을 거꾸로 한 것이 a0b4c1d7이 나와야 flag를 알 수 있다는 것이다.그리고 주의할 것은 입력값이 "%d"가 있어서 10진수라는 것이다. 결론적으로 xor한 값이 7d1c4b0a여야 하는 것이다.랜덤값 ^ 입력값 = 7d1c4b0a면, 입력값 = 랜덤값 ^ 7d1c4b0a도 성립하기 때문에 위와 같이 입력해야 하는 값을 구하는 코드를 짠다. 이제 우분투에서 nc로 문제 환경에 ..
-
Dreamhack - rev-basic-4wargame/Dreamhack 2024. 7. 17. 19:14
[LEVEL 1 - rev-basic-4 - reversing] 이전 문제와 동일하게 입력값을 검증해 맞으면 correct, 틀리면 wrong을 출력하는 프로그램이 주어진다. 똑같이 IDA로 열고 main() 디컴파일 했고, 이번엔 시프트연산을 하는 함수가 있어서 위와 같이 함수명을 변경했다. 시프트 연산을 하는 해당 함수를 들어가보면 위와 같고, 여기서 16을 곱하는 건 4비트 왼쪽 시프트 연산을 하는 것과 같다. 마찬가지로 byte_140003000을 들어가보면 위와 같이 나온다. 이걸 이용해 코드를 짜면 된다. 배열에 넣은 후, 4비트 왼쪽 시프트 연산으로 바꿔주고, 16진수의 바이트(8비트)만 사용하도록 % (16 * 16)을 해주었다. 이는 & 0xFF와 같다. C언어 소..
-
Dreamhack - rev-basic-3wargame/Dreamhack 2024. 7. 17. 18:49
[LEVEL 1 - rev-basic-3 - reversing] 이전 문제와 비슷하게 사용자의 입력값을 검증해서 맞으면 correct를, 틀리면 wrong을 출력하는 프로그램이 주어진다. IDA로 main() 디컴파일해서 함수 들어가보면 위와 같이 vfprintf 함수가 쓰인 걸 볼 수 있다. 그리고 또 다른 함수에서는 _acrt_iob_func()가 0번 스트림(stdin 파일 스트림)을 가져오는 걸 알 수 있다. 그리고 이 입력받은 a1을 처리하는 함수에 들어가보면 xor 연산을 하고 있는 부분을 볼 수 있다. byte_140003000을 들어가면 위와 같이 나온다. 이걸 이용해서 역연산하여 사용자 입력값이 무엇이어야 하는지 알아낼 수 있다. main()에 있는 함수명을 위처럼..
-
Dreamhack - pathtraversalwargame/Dreamhack 2024. 5. 28. 21:19
[Beginner - pathtraversal - web] 먼저 문제 환경에 접속한 후 문제파일도 다운로드한다.플래그값은 /api/flag에 있다고 문제 설명에 나와 있다. 유저가 guest랑 admin이 있는 걸 볼 수 있다. 위 코드를 보고 /api나 /api/flag를 입력하면 역시나 unauthorized가 떠서 플래그값을 볼 수 없다.그리고 /get_info에서 /api/user/일 때 상위 디렉토리로 한번 이동해서 /api/flag 경로를 가야하니까 ..flag를 입력해봤는데, 마찬가지로 플래그값을 볼 수 없다. 그래서 일단 BurpSuite을 켜서 프록시 탭의 intercept에서 open browser로 문제 환경에 접속하고, intercept를 on으로 킨다. 그다음 ..
-
Dreamhack - rev-basic-2wargame/Dreamhack 2024. 5. 27. 14:51
[LEVEL 1 - rev-basic-2 - reversing] 이 문제도 입력값이 맞으면 Correct를, 틀리면 Wrong을 출력한다. 일단 x64dbg에서 테스트겸 "exercise"를 입력하고 중단점 필요한 곳에 걸고 f8로 따라가다보면 Correct와 Wrong을 출력하는 부분이 위와 같이 나온다.아무거나 친 것이기 때문에 Wrong부분으로 점프하는 걸 볼 수가 있는데, Correct일 경우 call하는 함수를 더블클릭해 들어가본다. 클릭되어 있는 저 부분을 우클릭해서 덤프에서 따라가기를 누르면 아래에 플래그값이 그대로 나온다. 플래그값을 알았으니, 맞는지 확인하기 위해 새로 실행해서 정답을 입력해주고 f7로 하나씩 실행시켜보면 위와 같이 문자 하나하나 비교하는 걸 볼 수 ..