-
Level14 (bugbear -> giant)$ 시스템 해킹 $/Los Of BufferOverflow 2020. 1. 1. 14:37
소스코드를 확인해 보면 좀 길어졌습니다.
RTL2로 RTL을 이용하는 2번째 문제인것 같습니다.
주석을 위아래로 싸고 있는 코드를 살펴 보면 execve의 주소를 가져오는 기능을하는 코드라는 것을 확인 할 수 있습니다.
또한 RET에 execve의 주소를 넣지 않으면 안된다는 것을 알 수 있습니다.
하지만 문제가 되는 부분이 있습니다.
아래의 코드는 /home/giant/assassin에 접근을 하는 코드인데 기존에 tmp에 실행파일을 복사 해서 문제를 해결 했었는데 권한을 가질 수 없습니다.
그렇기 때문에 실행파일을 복사해서 문제를 해결할 수 없습니다.
그렇기 때문에 소스코드를 복사해서 소스코드를 좀 수정해서 컴파일을 해야 할 것 같습니다.
아래의 경로부분을 수정해 주면 됩니다.
gcc를 이용해서 컴파일을 하면 해당 문제로 exploit이 가능합니다.
execve 함수를 사용해야 하기 때문에 해당 함수의 주소를 찾아 보겠습니다.
libc 는 libc.so.6(0x40018000)를 사용하고 있습니다.
execve 함수의 offset 주소는 0x91d48 이므로 해당 함수의 실제 주소는 아래와 같습니다.
0x40018000 + 0x91d48 = 0x400a9d48
dummy를 넣고 RET에 위의 주소를 넣어보면 아래와 같습니다.
왜 execve 함수의 주소를 RET에 넣었음에도 불구하고 You must use execve! 가 출력이 되는것일까..?
execve 주소를 보면 중간에 \x0a 라는 문자가 개행문자로 들어가서 잘못되는 것 같다는 생각이 들어서 python 구문을 전부 ""로 묶겠습니다.
core를 이용해서 분석을 해보면 될것 같습니다.
이것 저것 수집을 하기 전에 어떻게 문제를 해결 할 것인지 미리 작성해 보겠습니다.
[Dummy 44 byte] + [execve (실행파일의 RET부분)] + [system (execve의 RET 부분)] + [Dummy 4 byte] + [/bin/sh] + [NULL 4 byte]
system 주소와 /bin/sh 주소를 찾아보겠습니다.
system 주소 : 0x40018000+0x40ae0 = 0x40058ae0
"/bin/sh" 주소 : 0x40018000 + 0xe3ff9 = 0x400fbff9
exploit을 해보겠습니다.
login : giant
password : one step closer
'$ 시스템 해킹 $ > Los Of BufferOverflow' 카테고리의 다른 글
Level16 (assassin -> zombie_assassin) (0) 2020.01.01 Level15 (giant -> assassin) (0) 2020.01.01 Level13 (darkknight -> bugbear) (0) 2020.01.01 Level12 (golem -> darkknight) (0) 2020.01.01 Level11 (skeleton -> golem) (0) 2020.01.01