1580, 79/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 : 847     Date : 2023/01/14 03:09



    
해킹잘하고싶다 마지막 문단에 오해의 소지가 있네요.
Windows API에선 WinMain이 시작점이라서 main함수와 이름이 다르긴 한데
"gcc같은 콘솔 C언어 프로그래밍에서 main함수 이름을 변경할 수 있을까?"가 고찰할 점입니다.
구글링을 해서 한번 알아봐야 되겠네요.
2023/01/15  
20   [동강][퍼온글]C언어로 Hellow world를 출력해보자![2]     한승재
05/23 4173
19   [퍼온글]리눅스 기본 명령어     한승재
06/06 4755
18   자격증 (문제)사이트 [2]     koreal33t
09/06 3997
17   CTF 사이트[1]     koreal33t
09/06 4175
16   윈도우,리눅스에서 내 ip를 확인해 보자 [1]     koreal33t
09/06 3548
15   신기한 프로그래밍 언어[3]     koreal33t
09/06 4339
14   홍보합니다. 신생 보안커뮤니티입니다.     kimwoojin0952
10/26 3941
13   데비안 계열 리눅스 의존성 깨졌을때 해결법     한승재
11/27 4193
12 비밀글입니다  감을못잡겠네요ㅜㅜ     잉잉잉
01/15 3
11   [팁] 우분투 미러링서버     한승재
03/09 3706
10   구글 백링크 작업 질문요     wkatnxka
03/30 3068
9   [팁] 파이썬 2소스를 3으로 변경해주는 사이트[3]     한승재
05/13 3564
8   K-Shield 주니어 5기 모집     lrtk
06/17 3878
7   무료 정보보안 기술인재 양성 과정 교육생 모집     chanjung111
06/17 4102
6   levitator.c (안드로이드 루팅) 공격 분석 소스 코드 공유.[4]     scube
08/17 3355
5   towelroot.c (zip) 코멘팅.[1]     scube
08/18 3364
  (꼼수) L.O.B 한방에 클리어하기[1]     해킹잘하고싶다
01/14 846
3   Call by value VS Call by Reference     해킹잘하고싶다
01/15 610
2   쉘코드 모음     해킹잘하고싶다
01/15 1141
1   리눅스 커널 2.6 버전 이후의 LKM     jdo
07/25 355
[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