튜기's blogggg

LOB skeleton->golem

by St1tch



golem.c를 보면 문제가 간단해 진거 같은 느낌인데 마지막을 보면 ret주소를 빼고는 모두 0으로 초기화 시켜버린다.

따라서 앞에서 사용했던 방식들은 사용할 수가 없다.(환경변수, buffer이용, argv이용)

따라서 다른 방법을 이용해야한다.

다른 방법중 한개로 공유라이브러리를 사용하는 것인데,

LD_PRELOAD를 환경변수에 등록시켜 놓으면 실행을 할때 우선적으로 설정해놓은 라이브러리를 참조한다.

이 라이브러리의 정보들이 실행을 시킬 때, 스택어딘가에 저장이 되고 이를 이용해서 쉘을 따면된다.



-fPIC는 독립적인 코드로 만들어 주며, 목적파일을 만들며, 

-shared는 목적파일을 이용해 공유라이브러리를 생성할 때 사용하는 옵션이다. 

공유라이브러리를 만들때는 보통 두 옵션을 함께 사용한다.


위에서 만들어진 라이브러리를 환경변수에 추가를 해야한다.

export LD_PRELOAD='공유라이브러리 경로'

이렇게 등록을 해주면 된다.



실행을 시켜서 buf의 주소를 확인하면 0xbffffbc0이다.

이 주소 뒷부분은 ret빼고는 모두 0으로 초기화 되기때문에 이 앞부분에서 공유라이브러리의 주소를 찾아내야한다.

따라서 0xbffff000부터 찾아보았다.




찾다가 보니깐 0xbffff777부터 nop sled가 시작되는 것을 확인할 수 있었다.

따라서 적당히 0xbffff780을 ret주소로 하고 실행을 시켰다.




환경변수를 해제할때는 unset 환경변수명  이런식으로 해제를 하면된다.

블로그의 정보

튜기's blogg(st1tch)

St1tch

활동하기