2019. 8. 17. 17:02ㆍLOB
버퍼 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 |