lob 10번 풀이 vampire -> skeleton

2019. 8. 17. 17:02LOB

버퍼 40, i 4, saved_argc 4 총 48 byte를 할당 받았습니다.

 

조건

1. argv를 2개 이상 넣어야 함,

2. egghunter 때문에 환경 변수를 사용하지 못합니다. '

3. argv[1][47]은 '/xbf'가 되어야 합니다.

4. argv[1]의 길이가 48을 초과해서는 안 됨.

5. buffer, argv 공간을 사용하지 못 함.


혹시나 이렇게 생각할 수 있다.

strcpy 부분에서 seved_argc의 공간을 오버플로우 시킬 수 있지 않을까?

라고 말이다.

메모리 구조를 표현하면 위와 같다.

이 부분이 strcpy 함수의 부분을 가져온 것인데 

ebp-40부분에 접근하여 사용한다.

여기서 오버플로우를 시키면 버퍼보다 높은 주소에 있는 변수나 공간들은

오버플로우 시킬 수 있지만, 더 낮은 주소에 있는 변수들은 오버플로우 시키지 못 한다.

 

따라서 saved_argc를 다른 값으로 초기화 시키는 일은 지금 내 실력으로는 안 될거 같다.


 

혹시나 뭔가 남은 것이 없나 확인을 위해 한 번 그동안에 썼던 페이로드대로 다시 한 번 

입력해보았다.

 

오홍

입력 했을 때 권한 부족이 나타난다.

이럴 때는 파일 복사를 해주면 된다. 파일 복사를 할 경우 파일의 권한이 

자기 자신의 권한으로 변경된다.

 

나는 tmp 디렉터리를 만들어 거기에 skeleton 파일을 복하해주었다.

 

이렇게 home에 가서 ls -l 명령어를 쓰면 skeleton 권한이 걸려있는 것을 볼 수 있다.

 

다시 tmp에 돌아와 보면 vampire의 권한으로 복사되어 있는 것을 볼 수  있다.

 

 

이제 다시 gdb를 사용하여 거의 끝 부분을 보면 

다 비어있는데 마지막 이 부분만 차 있는것을 볼 수 있습니다.

뭔지 확인해볼까요?

이렇게 파일이름이 들어가 있는것을 볼 수 있다.

 

파일이름은 초기화를 시키지 않으니 ret의 위치를 파일 네임으로 바꾸고 

파일네임을 쉘코드로 해주면 되지 않을까?

 

파일 이름으로 쉘코드를 할 때는 주의해야 할 사항이 있었다.

바로 쉘코드를 /x2f가 없는 것으로 해야한다는 점이었는데

바로 /x2f가 아스키코드로 /여서 잘 안 되었던거 같다.

'/'문자가 포함되면 경로로 인식되어 쉘코드가 제대로 동작하지 않는것이다.

 

 

2f가 없는 쉘코드 

\x31\xc0\x50\xba\x11\x11\x11\x11\x81\xc2\x1e\x1e\x62\x57\x52\xba\x11\x11\x11\x11\x81\xc2\x1e\x51\x58\x5d\x52\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80

 

\x31\xc0\x50\xba\x11\x11\x11\x11\x81\xc2\x1e\x1e\x62\x57\x52\xba\x11\x11\x11\x11\x81\xc2\x1e\x51\x58\x5d\x52\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80

 

이렇게 쉘코드로 심볼릭 링크 파일을 만들어주었다.

core dumped가 떴다. 이제 core 파일을 분석해보자.

 

쉘이 따진 것을 볼 수 있다.

따라서 /home/vampire로 돌아가 다시 심볼릭 링크 파일을 만들어준 후

똑같이 쉘코드를 넣어주면 다음과 같이 답이 다온다.

 

ID: skeleton

PW: shellcoder

'LOB' 카테고리의 다른 글

lob 11번 풀이 skeleton -> golem  (0) 2019.11.16
lob 9번 풀이 troll -> vampire  (0) 2019.08.14
lob 8번 풀이 orge -> troll  (0) 2019.07.28
lob 7번 풀이 darkelf -> orge  (0) 2019.07.28
lob 6번 풀이 wolfman -> darkelf  (0) 2019.07.27