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



    
해킹잘하고싶다 마지막 문단에 오해의 소지가 있네요.
Windows API에선 WinMain이 시작점이라서 main함수와 이름이 다르긴 한데
"gcc같은 콘솔 C언어 프로그래밍에서 main함수 이름을 변경할 수 있을까?"가 고찰할 점입니다.
구글링을 해서 한번 알아봐야 되겠네요.
2023/01/15  
40   * 해킹의 공격기술 *[3]     HackerMapia
03/01 13257
39   * C언어를 꼭배워야하는가 *[2]     HackerMapia
02/21 8399
38   * C C++ *     HackerMapia
03/01 7708
37   * 윈도우를 빠르게열자 *[6]     HackerMapia
02/24 7398
36   * 윈도우 단축키 아는것들 *[7]     HackerMapia
02/20 7172
35   * 윈도우 해킹의 기본원리 *     HackerMapia
02/21 17820
34   * 윈도우 해킹의 기본 원리*[29]     oes2
08/26 12950
33   * 윈도우 종료를 빠르게 *[2]     HackerMapia
02/20 7695
32   * 점화식의 간단한 알고리즘     limjongmin
08/20 8923
31   * 점화식 간단하게     limjongmin
08/20 6744
30   * 인터넷검색이 달인이 되는 10가지 방법 *[1]     HackerMapia
02/24 7752
  (꼼수) L.O.B 한방에 클리어하기[1]     해킹잘하고싶다
01/14 861
28   (펌)Wireshark 설치 및 사용법입니다.~[2]     Mach
04/29 7820
27   (WindowXP기준) 간단한 컴퓨터 최적화     dzhfldk
08/22 6700
26   (잡담)포인터는 쉽다?[2]     sihun1113
05/01 6243
25   (2차수정)단순하고 위험한 파일 업로드 해킹기술[2]     gohy032
07/30 13193
24   <샤오쓰 타로>5.안내문표시pri.h[1]     sihun1113
06/04 6592
23   <샤오쓰 타로>4.첫화면구현pri.h     sihun1113
06/04 6060
22   <샤오쓰 타로>3.show.h-2     sihun1113
06/04 6536
21   <샤오쓰 타로>2. show.h 구현-1     sihun1113
06/04 6617
[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