본문 바로가기
워게임/LOB

LOB - vampire(심볼릭링크)

by meanjung 2021. 8. 1.

argv[1] 길이는 48까지.. 딱 ret까지 덮을 수 있넹

buffer, env 지워버리기..

argv도 지워버리기....


내가 기억하기론 0xc0000000에 가장 가까운 곳에 argv가 생기는 걸로 아는데, 여기 말고도 처음 main 함수 들어가기 직전에 파일 이름이 한 번 더 스택에 올라간다고 알고 있다.

 

 

 

정확히 vampire.c의 마지막 부분인 //ultra argv hunter! 이 부분이 어느 부분(    or    )을 지우는 지 알아봤다.

test.c

위와 같은 코드의 test.c를 만들었다.

gcc -o test test.c 로 컴파일하고, gdb test를 통해 값을 확인했다.

이를 통해 문제에서 지우는 argv 값은 main 함수 시작하기 전에 들어가는 파일이름을 지워버린다는 것을 알 수 있다.

 

그렇다면, 우리는 0xc0000000에 가까운 곳에 적시되는 파일 이름을 이용해 익스할 수 있을 것이다.

 

 

 

 

내가 처음에 생각한 것은, 심볼릭 링크를 이용해 파일 이름 "\x90"*0x1000 + "슬래시없는 쉘코드"로 주고, ret0xc0000000-0x1000+1 정도로 줘서 쉘 코드를 실행하는 방식이었다. 

 

하지만,,,, 파일 이름과 디렉터리 이름이 너무 길다며 만들어지지 않았다.

 

 

어쩔 수 없이! 직접 쉘 코드의 시작 주소를 찾았다.

 

 

우선, LOB 환경에서는 스택의 가장 높은 주소가 0xc0000000임을 알고 있다.

cp skeleton tmp

gdb tmp

여기 확인해보면, 맨 밑에 \x00이 5개가 들어가고, 그 다음에 파일 이름이 오는 것을 확인할 수 있다.

 

 

내가 파일이름으로 넣을 "슬래시없는 쉘코드"는 35바이트이다.

\x31\xc0\x50\xb8\x2e\x2e\x73\x68\x66\x05\x01\x01\x50\xb8\x2e\x62\x69\x6e\x04\x01\x50\x89\xe3\x31\xc0\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80
[출처 : https://kortsec1n4mationm.tistory.com/18]

 

 

그렇다면, 내가 ret 해야하는 주소는 [0xc000 0000 - 0x28]  0x28 == 40 == 35(쉘코드 길이) + 5(\x00) 

 

 

정리하면,

 

1. 심볼릭 링크로 '쉘코드 이름의' 파일 만들기

 

2. 방금 만든 파일을 실행하며 인자로 아까 구한 값[0xc000 0000 - 0x28] 주기

'워게임 > LOB' 카테고리의 다른 글

LOB - golem(SFP overflow)  (0) 2021.08.04
LOB - skeleton  (0) 2021.08.03
LOB - troll (환경변수)  (0) 2021.08.01
LOB - darkelf  (0) 2021.07.31
LOB - wolfman (심볼릭 링크)  (0) 2021.07.31

댓글