본문 바로가기

포너블/lob

lob 10번

드디어 10입니다. 먼저 코드 확인해 보겠습니다.

9번보다는 8번과 코드가 비슷합니다. 하지만 아래를 보시면 argv의 값을 모두 0으로 바꿔버리는 것을 알 수 있습니다. 그렇기 때문에 8번에서 쓴 argv[0]에 shell코드를 삽입하지도 못 하며, 평소에 사용하던 argv[1]나 argv[2]에도 shell코드를 삽입하여 페이로드를 쓸 수 없다는 것입니다, 그렇다면 어떤 방식으로 페이로드를 작성하고 ret값을 조작해주어야 할까요?

10번에서 알아야 할 개념은 저희가 페이로드를 작성해서 실행을 하게 되면 파이썬 코드를 실행한 부분이 메모리상에서 두 번 남습니다. 다시 풀어서 설명하면 저희가 생각한 메모리 영역에 argv[0],argv[1]의 내용이 쌓입니다. 하지만 스택의 거의 가장 아래 부분으로 gdb로 확인해보면 우리가 보낸 페이로드와 완전히 똑같은 내용이 메모리 영역에 남아 있습니다. 그렇기 때문에 저희는 0으로 초기화된 부분으로 평소에 했던 것처럼 ret값을 조작해주는 것이 아니라 지워지지 않는 스택 가장 아래 영역의 기록으로 ret값을 조작해 주어야 합니다.

먼저 8번처럼 argv[0]에 shell코드를 넣어주기 위해 심볼릭 링크를 걸어주겠습니다.

그 다음 복사파일에 건 심볼릭 링크로 gdb를 열어준 다음 파이썬코드를 보내 준 다음 주소를 확인해보겠습니다.

지금 보면 0xbfffff8a부분에 우리가 작성한 페이로드에 대한 기록이 한 번더 있는 것을 확인할 수 있었습니다. 그리고 주소를 보아 스택 영역의 가장 아랫부분인 것을 알 수 있습니다.

하지만 이번 아무리 그 주위의 주소로 ret값을 조작해주고 core값을 확인해보아도 관리자 권한이 얻어지지 않았습니다.

그래서 열심히 구글링을 해본 결과 shell코드 오류였던거 같아 70바이트짜리 shell코드로 바꾸어 다시 심볼릭 링크를 걸어주었습니다.

그리고 위에서 했던 것처럼 다시 gdb를 확인해보았습니다. 그리고 페이로드를 다시 작성했더니 관리자 권한을 얻을 수 있었습니다.

10번 문제는 정확히 무슨이유인지는 모르겠지만 45바이트짜리 shell코드가 아니라 70바이트 짜리 shell코드를 사용해야 하는 것입니다. 이렇게 해서 비밀번호 shellcoder를 획득했습니다.

'포너블 > lob' 카테고리의 다른 글

lob 9번  (0) 2020.01.08
lob 8번  (0) 2020.01.08
lob 7번  (0) 2020.01.05
lob 6번  (0) 2020.01.05
lob 5번  (0) 2020.01.05