1580, 76/79 회원가입  로그인  
   해킹잘하고싶다
   http://없음
   (꼼수) L.O.B 한방에 클리어하기

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=8564 [복사]


필자가 LD_PRELOAD에 대해 연구하면서 알게 된 사실인데

my-pass 파일은 매우 취약하다.

LD_PRELOAD는 환경변수 중 하나이다.

프로세스를 실행하는 과정에서 라이브러리를 로딩할 때,

LD_PRELOAD(환경변수)가 설정이 되어있다면

해당 변수에 지정된 라이브러리를 먼저 로딩한다.

LD_PRELOAD 환경변수에 저장하는 여러가지 방법 중 쉘에 등록하여 사용하는 방법이 있다.

my-pass 파일은 geteuid를 해서 사용자의 euid에 맞는 패스워드를 출력해준다.

그런데 LD_PRELOAD라는 환경변수는 특정한 함수를 미리 등록해 둘 수 있다.

그렇다면 이 LD_PRELOAD란 무엇일까?

아래는 간단하게 구글링을 하여

해외 사이트에서 ld_preload에 대해 찾아본 글을 인용한 것이다.

========================================
.
.
.
Normally the Linux dynamic loader ld-linux (see ld-linux(8) man page) finds and loads the shared libraries needed by a program, prepare the program to run, and then run it. The shared libraries (shared objects) are loaded in whatever order the loader needs them in order to resolve symbols.
.
.
.

(해석)
.
.
.
보편적으로 리눅스 동적 로더는 프로그램에 필요한 공유 라이브러리들을
찾고 로드하며 실행할 프로그램을 준비한 다음 실행한다.
공유 라이브러리는 기호를 확인하기 위하여 로더가 필요한 순서대로 로드된다 그리고...
========================================







geteuid가 원하는 단계의 uid를 리턴하도록 LD_PRELOAD를 사용해서 조작할 수 있다.

그러면 my-pass는 조작된 geteuid의 결과에 따라 다른 아이디의 비밀번호를 뱉어낼 것이다.

---------------------
int geteuid(void);

int main(void)
{
        return geteuid();
}

int geteuid(void) {
    return 520;
}

--------------------

[gate@localhost gate]$ gcc -o geteuid -shared -fPIC geteuid.c
[gate@localhost gate]$ export LD_PRELOAD=./geteuid
[gate@localhost gate]$ my-pass















필자가 이것을 생각하는 도중,

int geteuid(void)
{
    return 520;
}

이렇게 쓰면 main함수, 즉 시작점이 없다고 에러를 뱉었다.

그렇다면 main함수에서 서브함수를 만든다음 520을 리턴하고 그 값을

main함수가 리턴하면 이랬던 저랬던 520을 리턴한다는 사실은 변함없지 않는가?

모든 프로그램은 시작점이 존재한다.

일반적인 C언어라면 main함수가 시작점이 되는데 (이것을 entry point라고도 한다)

이 시작점을 main이 아닌 다른 이름의 함수가 될 수 있을까?

라는 고찰을 하면서 강좌는 여기까지 마치겠다.


  Hit : 875     Date : 2023/01/14 03:09



    
해킹잘하고싶다 마지막 문단에 오해의 소지가 있네요.
Windows API에선 WinMain이 시작점이라서 main함수와 이름이 다르긴 한데
"gcc같은 콘솔 C언어 프로그래밍에서 main함수 이름을 변경할 수 있을까?"가 고찰할 점입니다.
구글링을 해서 한번 알아봐야 되겠네요.
2023/01/15  
80   levitator.c (안드로이드 루팅) 공격 분석 소스 코드 공유.[4]     scube
08/17 3370
79   안녕하세요.     god0631a
03/16 3303
78   구글 백링크 작업 질문요     wkatnxka
03/30 3077
77   쉘코드 모음     해킹잘하고싶다
01/15 1167
  (꼼수) L.O.B 한방에 클리어하기[1]     해킹잘하고싶다
01/14 874
75   Call by value VS Call by Reference     해킹잘하고싶다
01/15 625
74   리눅스 커널 2.6 버전 이후의 LKM     jdo
07/25 387
73 비밀글입니다  감을못잡겠네요ㅜㅜ     잉잉잉
01/15 3
72 비밀글입니다  2.3 모니터에 데이터 출력하기 printf()      xownsdk2
08/20 2
71 비밀글입니다  해커스쿨 관리자님께     packer
03/20 2
70 비밀글입니다  질문합니다~     마누라
08/05 1
69 비밀글입니다  [re] : 해쿨 광주에서 같이 겅부하실분 선생님 & 스승 구합니다.     ne4760
03/25 1
68   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
67   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
66   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
65   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
64   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
63   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
62   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
61   비밀글입니다  [re] c++ 강좌     sinslove
02/22 0
[1]..[71][72][73][74][75] 76 [77][78][79]

Copyright 1999-2023 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com