반응형
Level 11부터는 어느 정도 공부가 필요한 것 같아서 달고나 BOF문서를 공부하고 풀었습니다.
우선 Level11에 접속하여 hint를 보면
256바이트의 배열이 생성되는 것과 strcpy함수를 볼수 있습니다.
이 프로그램을 gdb로 뜯어보면
main+3 에서 0x108만큼 할당을 하는 것을 볼 수 있습니다.
그리고 main+48에서 strcpy를 호출하고 있구요 (취약점 발생부분)
그럼 main+53에 break를 걸어줍니다.
여기서 메모리 구조를 보면
ret 4byte
SFP 4byte
dummy 8byte
stack 256byte
로서
총 272바이트가 됩니다.
그렇다면
NOP + 쉘코드 (268byte) + RET (4byte)
형태가 되어야 겠지요.
그런데.... 안되네요.
setUID 문제라고 하던데..
파일을 따로 복사해서 하면 된다는데 왠지 완벽할것같지 않아 다른 방법으로 생각해 보았습니다.
그래서 환경변수를 사용해서 문제를 풀어보게되었습니다.
우선 에그쉘을 실행시켰는데...
주소가 매번 다르네요 ㅠㅠ
1시간 정도 구글링한 결과 getenv함수(환경 변수 목록중에서 원하는 변수값을 구하는 함수)를 이용하여 에그쉘이 들어있는 환경변수의 정확한 주소를 얻어옵니다.
아래의 코드를 컴파일 해줍니다.
그리고 실행 시켜 줍니다.
이제 주소가 변하지 않아요!
위에서 메모리구조를 파악한 것을 토대로하면
아무값이나 268바이트의 크기에 넣어주고 RET주소 값을 에그쉘의 주소값으로 설정해주면 됩니다.
반응형
'Security > Pwnable' 카테고리의 다른 글
FTZ Level 13 (0) | 2021.08.09 |
---|---|
FTZ Level 12 (0) | 2021.08.09 |
Buffer Overflow 원리 - 공격-1 고전적인 방법 (0) | 2021.08.08 |
Buffer Overflow 원리 - 쉘코드 (0) | 2021.08.06 |
Buffer Overflow 원리 - Buffer overflow의 이해 (0) | 2021.08.06 |