level11시작합니다!

 

이렇게 힌트를 보면... 코드가 나와있습니다. 256바이트를 할당했다네요.

strcpy 취약점을 이용해서 BOF를 하면 될 것 같습니다.

strcpy의 취약점은 복사하는 문자열의 길이를 검사하지 않기 때문에 BOF가 일어날 수 있다는 것입니다. 참고로 알아두세요!

 

처음에는 vim으로 tmp 폴더에 직접 복사 붙여넣기 했었는데... 생각해보니까 cp를 이용하면 쉽게 끝낼 수 있었습니다.

그런 뒤 gdb로 분석을 해보죠!

 

disas 한 결과입니다.

흐음... 처음에 sub 명령어로 0x108 만큼의 용량을 할당해주네요..?

 

0x108은?

264랍니다.

그러면 이 char 배열의 구소는

256 데이터 + 8 더미 + 4 sfp + 4 ret 겠네요!

 

1. 처음 시도.

처음에는 LOB에서 배운대로 쉘 코드를 char 배열의 어느 부분을 ret 주소가 가르키게 해서 실행하려고 했습니다.

하지만... 그게 말처럼 쉽지는 않더군요... 아무래도 실제 파일과는 메모리 할당 면에서 차이점이 많은것 같습니다.

안됩니다...

2. 환경변수에 넣기.

이제 LOB에서 배운대로 한번 환경변수에 넣어보기로 했습니다.

이렇게 말이죠?

shll이라는 환경변수에 쉘코드와 nop(\x90)을 여러번 입력한 데이터를 저장한 뒤 이 주소로 이동하도록 하면 됩니다.

 

이 환경변수의 주소를 알기 위해서

다음과 같은 코드도 짜줍니다.

그런 뒤 실행하면?

이렇게 나오게됩니다.

이것도 환경변수가 막 고정적인 주소를 가지고 있는게 아닌거 같습니다.. 실행할 때마다 가끔씩 메모리 주소가 바뀌네요.

 

암튼 이 문제를 해결하기 위해서는 sfp까지 약 268칸을 무언가로 채워주고 그 뒤 4바이트를 환경변수의 주소로 채워주면 됩니다.

 

이렇게 말이죠. 참고로 주소는 리틀 엔디안 방식으로 입력되어야 합니다...

끄읕!

+ Recent posts