전체 글

전체 글

    리버싱 공부 시작

    lob를 풀다보니 메모리구조를 잘 몰라서 많이 막힌다오늘부터 리버싱공부를 시작해야겠다.

    어셈블리어 (1)

    1. 어셈블리어란?기계어와 1대1로 대응되는 저급언어하드웨어를 컨트롤 하기편함2.어셈블리어 기본정리segreg : 16비트 세그먼트 레지스터mem : 메모리label : 지정된 레이블imm : 즉시값reg : 일반 범용 레지스터 Prologue (프롤로그) -> push EBP 함수가 호출될때 사용됨 ebp의 값을 push하고 esp의 값을 ebp에 저장함 mov EBP ESP Epilogue (에필로그) 프롤로그때 잡아줬던 스택 프레임을 해제하는것-> mov ESP EBP ebp의 값을 esp에 저장함 ebp를 ebp의 값을 push 함 pop EBP // 함수에 들어갓다가 다시 나올때 주소가 엇갈리지않게 하는 역할을함 push 스택에 값을 쌓음pop 스택의 최상단 값을 뽑아냄

    HackerSchool LOB Level 11

    이번 문제는 버퍼만 초기화 시키지않고 버퍼 뒷부분도 다 초기화 시켜버린다푸는 방법은 공유 라이브러리를 이용해서 풀면된다 간단한 파일을 만들어주고 공유 라이브러리로 컴파일한다공유 라이브러리 설정은 -fPIC -shared 이다 ※ 파일명에 경로를 설정해줘야한다. LD_PRELOAD 라는 환경변수에도 공유라이브러리를 등록해주어야한다 LD_PRELOAD=프로그램이 라이브러리를 가져오기전에 원하는 라이브러리를 먼저 등록해주는 환경변수 golem을 gole1로 복사해주고 놉 48개를 넣어 인자를 맞춘후 스택을 보면 bffff560 이 아까 등록한 공유 라이브러리의 주소이다 버퍼를 44까지 채우고 ret에 아까구한 공유라이브러리 주소를 넣어주면풀린다 비밀번호는 cup of coffee 이다

    HackerSchool LOB Level 10

    밑에 ultra argv hunter 를 해석하자면 모든 인자를 그 인자의 크기만큼 초기화 시키는 함수이다사진에는 보이지 않지만 버퍼는 40이다 8번과 같이 심볼링링크에 쉘코드를 넣어주고 argv[0]의 주소를 구해서 공략하면된다비밀번호는 shell coder 이다

    HackerSchool LOB Level 9

    argv[1] [46]이 xff면 안된다는 조건이 추가되었다.풀이방법은 주소를 xfe로 바꾸면된다 argv[1]에 ret을 대충 xfe로 해주고 argv[2]에 놉 , 쉘코드 순서대로 넣은다음 놉의 갯수를 조금씩 늘려가면된다 비밀번호는 music wolrd 이다

    HackerSchool LOB Level 8

    코드를 보면 argv[1]을 초기화시키는 구문이 추가되었다. troll.c 를 trola.c로 복사해주고 argv[0]의 주소를 구하기위해 trola.c 에 printf("%x\n", argv[0]); 를 추가한다 trola.c를 trola로 컴파일하고 쉘코드를 넣어 심볼링링크를 만들어준다. 심볼링링크로 trola를 실행시키고 인자값을 맞춰 넣어주면 주소가나온다주소는 bffffb6f 이다 이제 troll을 공략할 준비가 끝났다. 원본파일인 troll을 공략하기위해 troll에 아까와같이 앞글자만바꿔서 심볼링 링크를 걸어준다 아까와같이 페이로드를 작성해주면 풀린다 비밀번호는 aspirin이다

    HackerSchool LOB Level 7

    6번과 모두 같으나 argv[0]이 77이어야한다는 조건이 추가되었다.심볼링 링크를 이용하여야한다ln -s [링크걸 파일이름] [링크] ln -s orge `python -c 'print "./"+"A"*75'` // 링크에 ./도 포함되어야한다 이하는 6번과 같다비밀번호는 timewalker 이다

    HackerSchool LOB Level 6

    소스를 보면 5번과 거의같다 다른점은 argv[1]의 길이가 48보다 클경우 종료되는 코드가 추가되었다.5번과 똑같이 풀면된다 비밀번호는 kernel crashed 이다