[문제풀이] Nebula, Level13, Level14 Wargames/e-exercises.com2017. 7. 23. 19:57
※ LEVEL 13
Q. There is a security check that prevents the program from continuing execution if the user invoking it does not match a specific user id.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <string.h> #define FAKEUID 1000 int main(int argc, char **argv, char **envp) { int c; char token[256]; if(getuid() != FAKEUID) { printf("Security failure detected. UID %d started us, we expect %d\n", getuid(), FAKEUID); printf("The system administrators will be notified of this violation\n"); exit(EXIT_FAILURE); } // snip, sorry :) printf("your token is %s\n", token); } | cs |
A. 이는 간단한 리버싱 문제이다. "// snip, sorry : )" 라고 표시되어 삭제된 코드 부분을 맞추는 문제이다.
위의 14번째 라인만 우회하면 토큰 생성 로직으로 넘어가게 되는데 어셈블리어를 스스로 분석해도 되고 그냥 넘어가도 알아서 토큰이 생성되어 출력되므로 뭐 편할대로 하면된다. 간단하니까 별도 설명없이 캡쳐만 첨부하도록 하겠다.
[그림 1] 로직 우회 후 토큰이 생성되는 것을 확인
[그림 2] 토큰 값을 패스워드로 사용하여 로그인
※ LEVEL 14
Q. This program resides in /home/flag14/flag14. It encrypts input and writes it to standard output. An encrypted token file is also in that home directory, decrypt it :)
A. 이는 토큰 파일에 암호화되어 있는 문자열을 복호화하는 문제이다. 이 또한 굉장히 단순한 리버싱 문제이다.
[그림 3] 토큰 값 확인
[그림 4] 프로그램을 실행하여 암호화 로직 확인
보는 바와 같이 굉장히 간단한 암호(?)화 방식이다. 실행 방식만 봐도 규칙을 알 수 있다. 문자열 인덱스 값을 문자 아스키코드에 더해 나오는 방식이다. 그럼 뭐 간단히 코드를 짜서 복호화해도 되고 얼마 안되니 수동으로 해도 되고..
[그림 5] 토큰 값 확인
[그림 6] 플래그 확인
이번 두 문제는 오히려 이전 레벨보다도 너무나 쉬웠다.
이런 문제들도 가끔 나와야지 ~ ㅋ
'Wargames > e-exercises.com' 카테고리의 다른 글
[문제풀이] Nebula, Level16 (0) | 2017.08.07 |
---|---|
[문제풀이] Nebula, Level15 (0) | 2017.07.25 |
[문제풀이] Nebula, Level11, Level12 (0) | 2017.07.21 |
[문제풀이] Nebula, Level09, Level10 (0) | 2017.07.19 |
[문제풀이] Nebula, Level05, Level06, Level07, Level08 (0) | 2017.07.16 |