uju's Tech

[Injection] 리눅스 공유라이브러리 로드 본문

Programming/C 언어 이모저모

[Injection] 리눅스 공유라이브러리 로드

ujusy 2020. 7. 8. 22:42

<본 포스팅은 공부목적으로 작성되었습니다. 혹시 틀린 부분이 있거나 문제가 되는 부분이 있다면 답글 달아주세요!>

 

리눅스 명령어 ls와 whoami를 인젝션을 해보고 싶었는데 구현한 코드를 로드 하려면 리눅스의 공유라이브러리가 어떻게 

로드되는지 알아야한다. 나아가 이를 수행하기 위한 절차 또한 정리해보았다!!


 

먼저 리눅스는 프로그램 실행 시 공유 라이브러리가 프로세스 공간에 로딩이 된다. 

동일한 라이브러리의 경우 가장 먼저 로드 되어진 것만 사용이 된다. 

결과적으로 리눅스에서 공유 라이브러리의 로딩 순서는 아래와 같이 갖는다.

 

  1. Dynamic Section 중 need가 설정된 라이브러리
  2. LD_LIBRARY_PATH
  3. /etc/ld.so.conf
  4. 표준 라이브러리 경로

만약 LD_PRELOAD로 라이브러리를 설정하면 가장 1순위의 라이브러리가 로드된다. 

따라서 어떤 특정 라이브러리를 로드하는지 알고 이를 LD_PRELOAD로 올리면 내가 원하는 코드를 실행할 수 있다. 

 

이를 위해 수행해야할 단계를 작성해 보았다.

  1. ltace(Library Trace)로 명령어가 사용하는 라이브러리를 확인한다.
  2. 인젝션 대상 함수를 오버라이딩 할 라이브러리를 제작한다.
  3. LD_PRELOAD 환경 변수에 라이브러리를 등록한다.
  4. 인젝션한 명령어를 실행해보자.

 

아래는 ls 명령어 injection 수행 포스팅이다..!  과정을 보고싶다면 이 포스팅으로!

https://uju-tech.tistory.com/42

 

ls Hooking(Injection) 하기

<본 포스팅은 공부목적으로 작성되었습니다. 혹시 틀린 부분이 있거나 문제가 되는 부분이 있다면 답글 달아주세요!> 특정한 파일이 보이지 않도록 (ls) Injection을 진행해보았다. 정확히 말하면 I

uju-tech.tistory.com

 

Comments