passcode : music world
(NO DRAG, NO PASSCODE)
bash2. skeleton 이다. 바로 소스코드를 분석해보자.
모든 인자가 0으로 초기화 된다. 문제를 풀기 위해서는 인자를 무조건 넣어야 한다. 아마 0으로 초기화 시켜도 바뀌지 않는 영역이 있을 것이다. 한번 프로그램의 이름이 저장되는 영역을 찾아보자.
이와 같이 메모리에 프로그램의 절대 경로와 이름이 남게 된다. 즉 argv[0]은 변화하지 않는 것 같다. argv[0]만 사용 가능했던 orge 문제와 아주 유사하다고 볼 수 있다.
우선 tmp 디렉토리를 만들고 skeleton 프로그램을 복사하자.여기서 core dump를 일으켜 정확한 argv[0] 주소를 찾은 뒤에 payload를 작성하여 쉘을 따면 될 것 같다.
하지만 정말 이상한 문제였다. payload 에서 NOP Sled 를 작성할 때에
- NOP(20bytes) + shellcode
- NOP(100bytes) + shellcode
가 모두 쉘을 따지 못하고 계속 segmentation fault 만 떠서 실패하였다. 결국 성공한 방법은 다음과 같다.
- NOP(100bytes) + shellcode + NOP(100bytes)
우선 심볼릭 링크를 걸어주고 이를 이용하여 ret 주소를 대충 박고 core dump 를 일으키자.
성공적으로 심볼릭 링크를 걸었다. 이제 core dump 를 일으키자.
core dump 가 일어났다. 이제 core 파일을 분석하여 정확한 argv[0] 의 주소를 찾아내자.
argv[0] 의 주소는 다음과 같다. → 0xbfffff03
따라서 우리는 NOP Sled 를 이용하기 위하여 0xbfffff13 정도의 주소를 사용하면 될 것 같다.
이제 payload를 작성하여 쉘을 따보자.
[skeleton] : shellcoder
'Pwnable > LOB' 카테고리의 다른 글
[LOB] 11. GOLEM (0) | 2020.08.28 |
---|---|
[LOB] 10. SKELETON (0) | 2020.08.28 |
[LOB] 8. TROLL (0) | 2020.08.28 |
[LOB] 7. ORGE (0) | 2020.08.28 |
[LOB] 6. DARKELF (0) | 2020.08.28 |