1. intro
2. code 및 분석
2.1. code
생략
2.2. 분석
level 10 : level9 + ASLR이다.
level 11,12 : 유저 영역에 플래그를 읽어들인 뒤 플래그 파일을 삭제하고, 커널 영역에서 쉘코드를 실행한다.
3. 취약점 확인 및 공격 준비
3.1. 취약점
생략
3.2. 공격 준비
level 9와 10의 페이로드가 동일하다.
다만, 주소를 어떻게 설정하느냐인데, 가상 머신을 실행할 때 커널 함수 base address가 매번 변경되지만, 처음 설정된 주소 그대로 유지되기 때문에 dmesg를 통해 적절히 레지스터에서 주소를 가져와 오프셋을 계산하면 된다.
물론 일반적인 상황은 아니지만...
level 11과 12의 페이로드가 동일하다.
둘 다 플래그를 삭제해버리지만, 유저 영역의 메모리에 있던 플래그 값이 결국은 커널 영역에서 접근 가능한 위치에 지워지지 않고 존재하기에 루프를 돌며 해당 값을 찾으면 된다.
처음에는 바이너리에서 커널영역으로 이동 후 다시 바이너리로 와서 flag 위치의 값을 출력해보기도 하고,
커널영역에서 다시 한번 바이너리의 flag 위치의 값을 커널 영역으로 복사하여 출력해보기도 하고,
이런저런걸 다 해봤는데 결론은 flag 위치를 null로 초기화되버려 아무것도 출력되지 않는 것을 볼 수 있다.
분명 바이너리에서 커널 영역으로 이동 후 copy from user함수를 통해 바이너리의 쉘코드를 가져가긴 하는데,
플래그 영역만 딱 초기화되버린다.
왜인지 모르겠음...
특이사항으로는 level 11에서는 python으로 shellcode를 바이너리에 전달해도 flag가 잘 출력되지만,
level 12에서는 flag가 잘려서 출력되는 문제가 있었다.
그래서 shellcode만 뽑아서 바이너리에 직접 넣어줬더니 모두 출력해줬다.
왜 이런지는 모르겠음;;;
아래 영상을 참고하였기에 직접 푼걸로 보기에는...
(29) CSE 466: Computer Systems Security - Extended Q&A - 12/07/2021 - YouTube
(29) Kernel Security - Robert - Live Session - 2022.11.09 - YouTube
4. exploit
생략
'Wargame > pwn.college' 카테고리의 다른 글
Talking web - payload (0) | 2023.10.17 |
---|---|
Program interaction - 1~142 (0) | 2023.10.16 |
kernel security level9 (0) | 2023.09.25 |
pwn.college - kernel security payload (0) | 2023.09.25 |
kernel security level8 (0) | 2023.09.24 |