gremlin 역시 cobolt와 큰 차이가 나지 않는 것으로 보인다.
지금까지는 main 함수의 인자로써 값들을
gets()함수로 받는다.
하지만, gets 역시 얼마나 입력받는지 알 수 없기 때문에 취약점이 있는 함수이다.
따라서 전과 같이 환경변수를 설정 해 준 후
다음과 같이 goblin을 실행해서 직접 넣어주려고 했는데
Segmentation fault가 나오며 오류를 내뱉었다.
다른 사람들이 어떻게 했는지 찾아보니 Linux PipeLine을 이용하여
python에서 출력한 값을 그대로 넘기는 방식으로 실행하였다.
두개의 의문점이 남게 되었다.
1. 이 문제를 풀면서 알게된건데 환경변수 설정하면서
export EGG=python -c 'print "\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'
앞에 \x90 *100 이 계속 들어가고 있었는데 이 아이는 왜 들어가는 걸까?
- 다른 분이 답변을 해주셨는데 NOP sled기법 때문이라고한다.
ASLR 때문에 이동하는 메모리가 ShellCode를 건들이지 않게 하기 위해서 라고 생각하면 될것 같다.
2. 왜 내가 한 방식대로 집어넣는것은 segfault를 내뱉을까
'정보보안 > LOB' 카테고리의 다른 글
[LOB] Level6 (Wolfman->Darkelf) (0) | 2022.07.24 |
---|---|
[LOB] Level5 (Orc->Wolfman) (0) | 2022.07.24 |
[LOB] Level4 (Goblin->Orc) (0) | 2022.07.24 |
[LOB] Level2 (Gremlin->Cobolt) (0) | 2022.07.17 |
[LOB] Level1 (Gate->Gremlin) (0) | 2022.07.14 |