uju's Tech

ls Hooking(Injection) 하기 본문

Programming/C 언어 이모저모

ls Hooking(Injection) 하기

ujusy 2020. 7. 8. 22:07

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

 

특정한 파일이 보이지 않도록 (ls) Injection을 진행해보았다. 

앞서 원리를 알고싶다면 아래 포스팅을 참고!

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

 

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

<본 포스팅은 공부목적으로 작성되었습니다. 혹시 틀린 부분이 있거나 문제가 되는 부분이 있다면 답글 달아주세요!> 리눅스 명령어 ls와 whoami를 인젝션을 해보고 싶었는데 구현한 코드를 로드

uju-tech.tistory.com

 

정확히 말하면 Injection이지만 Hooking의 개념이라고 볼 수 있기에 Hooking이라고 제목을 지어보았다. ㅎㅎ

 

필자는 ls_hooking.c라는 파일을 해당 디렉토리에서 볼 수 없게 하고 싶었다. 

ls

ltrace ls를 통해 ls 명령어가 어떠한 구조를 갖고 실행되는지 살펴보자.

lstrace ls

살펴보니 memcpy가 동작하여 각 파일명을 copy하여 동작함을 볼 수 있다.

그러면 이제 어떤 함수를 통하는지 확인했으니 해당 함수를 오버라이딩 해보자!!

이 때 memcpy함수의 원형을 가져오는 것이 중요하다. 

 

ho.c라는 파일 안에 memcpy라는 함수 원형을 가져와 내부적으로 strcmp를 사용해보자.

아래는 해당 코드이다.

//c언어. // ho.c
#include <stdio.h>
#include <string.h>
void* memcpy(void* dest, const void *src, size_t count){
        char* dst8 = (char*)dest;
        char* src8 = (char*)src;
        if(strcmp(src,"ls_hooking.c")==0){
                return dest;
        }

        while (count--) {
            *dst8++ = *src8++;
        }

        return dest;
}

그 후 확장자 so인 파일을 만들어 주기 위해 gcc - shared -fPIC -o ho ho.c

 

수행 할  때 아래 사진과 같이 환경변수를 사용하여 라이브러리 로딩 순서를 바꾸어 실행한다.

실행 결과

따라서 위에서 확인 할 수 있듯이 ls_hooking.c 파일이 보이지 않음을 확인 할 수있다. 

 

gitgub:https://github.com/ujusy/C_Hooking

 

ujusy/C_Hooking

:bust_in_silhouette:l s, whoami hooking :bust_in_silhouette: - ujusy/C_Hooking

github.com

 

Comments