본문 바로가기
시스템 해킹/LOB

skeleton

by sonysame 2016. 10. 30.


argv[1][47]==bf이어야 한다.

stack destroyer이 부분에서

buffer부터 0xbfffffff까지 RET부분을 제외한 나머지 부분은 모두 초기화 된다.

buf보다 주소가 낮은 곳을 공격해야 된다.

그곳이 바로! 공유라이브러리 이다.




우리는 LD_PRELOAD라는 환경변수를 이용할 것인데,

LD_PRELOAD는 특별한 환경변수이다.


일반적으로 프로그램을 실행시키면 일반적인 공유 라이브러리를 로드한다.

하지만 LD_PRELOAD를 정의해주면 프로그램 실행시 LD_PRELOAD에서 정의해준 라이브러리를 로드하게 된다.

저 공유 라이브러리 영역에 우리의 데이터를 올릴 수 있게 된다. 


프로르램이 동작할 때 메모리에 실행한 프로그램만 로드하는게 아니라 프로그램 내부 사용하는 함수들도 실행을 해야되서 전부 메모리에 로드한다.

내부 함수들은 외부라이브러리에 존재한다.                                                                                                                                         


스택영역에도 라이브러리가 하나 있다.

바로 환경변수 LD_PRELOAD이다.

LD_PRELOAD를 통해 라이브러리를 공유 라이브러리 영역에 올리는게 가능하다.

사용자가 원하는 공유라이브러리를 먼저 등록시켜주는 환경변수이다.

프로그램은 자동적으로 LD_PRELOAD에 등록된 공유라이브러리를 먼저 프로그램에 링크시키게 된다.

결론적으로, 라이브러리 명을 올릴 수 있는 것이다.

이 부분에 입력해주면 이 부분을 먼저 보고, 이 부분에 없다면 PATH환경변수를 참조해라~ 이런 역할을 한다.

LD_PRELOAD는 스택에 찌꺼기를 남겨 사용할 수 있고, 그 부분을 이용해 공격을 해준다.


프로그램 실행->일반 공유라이브러리 로드

LD_PRELOAD 정의시: 프로그램 실행->LD_PRELOAD 공유 라이브러리 로드


일단, 공유라이브러리로 컴파일을 해준다.


LD_PRELOAD를 환경변수로 (절대경로 포함)







'시스템 해킹 > LOB' 카테고리의 다른 글

darkknight  (0) 2016.10.30
golem  (0) 2016.10.30
vampire  (0) 2016.10.30
troll  (0) 2016.10.30
orge  (0) 2016.10.29