본문 바로가기

Pwnable/Hackerschool FTZ

[FTZ] 02. Level1 - Backdoor 찾기

 

Level 1 문제 풀이

문제 파악


문제 분석

find 명령을 통해서 Setuid가 설정된 파일을 찾아 실행시키는 문제다.


※ 여기서 TIP

$ find / -perm -4000 -user level2

위 명령어로 입력하면 에러가 많이 출력되는데 ex) Permission denied

이 에러를 생략하려면 명령어 맨 뒤에 2>/dev/null 을 추가하면 된다.


※ 유닉스 시스템에는 입력(0), 출력(1), 에러(2)를 숫자로 표현할 수 있다.

즉, 시스템에 발생하는 에러에 대해서 /dev/null 로 보내라는 의미가 된다. (null = 없애라)

$ find / -perm -4000 -user level2 2>/dev/null


※ 여기서 TIP

$ find / -perm -4000 -user level2 -exec ls -alF {} \; 2>/dev/null

-exec 명령어는 어떤 결과에 대해서 또 다른 명령어 ls -alF 를 실행시키라는 의미이다.

앞 명령어의 결과를 넣어주는 방법이 {} \; 이렇게 입력하는 방법이다.



Owner      Group       Other

r w x    |    r w x    |    r w x


Owner와 Group은 파일소유자 자신과 자신이 속한 그룹을 의미.

Other은 제3자, 웹사이트 방문객은 제3자로 nobody로 취급.

r은 파일 읽기(4), w는 파일 쓰기(2), x는 파일 실행(1) 


SetUID : 일반적으로 파일을 실행시키면, 실행시킨 사용자의 권한으로 실행 되지만, SetUID가 설정된 파일을 실행하면 파일의 소유자 권한으로 실행됨.

SetGID : SetGID가 설정된 파일을 실행하면 파일의 소유그룹권한을 가지게 됨.

StickyBit : 공유디렉터리의 의미. StickBit가 설정된 디렉터리에 파일을 생성하면 생성한 사람의 소유로 생성됨. 삭제 또한 생성한 사람과 root만이 가능. 한마디로 공유디렉터리로 사용하기 위한 용도이다.


※ SetUID, SetGID, StickyBit는 해당 자리의 일반퍼미션에 실행퍼미션이 있어야만 적용된다.

대부분 소문자로 표기. 만약 대문자로 표기되어 있다면 설정은 되어 있지만, 일반퍼미션에 실행퍼미션이 설정되어 있지 않기 때문이다.


해결


쉘의 종류 --> 검색해서 따로 정리하자

1. /bin/bash

2. bash

3. sh


Hand-ray


시스템해킹과 리버싱을 시작하기 앞서 어셈을 C로 바꾸고 C를 어셈으로 바꾸는 능력은 정말 중요하다.

리버싱이든 시스템이든 우리는 어셈블리어를 무조건 마주치고 분석해야하는 입장이기 때문이다.

(안드로이드 리버싱은 달빅코드로 되어있어 어셈블리어와는 다른 개념)


문제를 많이 풀어보는 것도 좋지만 그 전에 C언어로 어떤 코드든 컴파일해서 그걸 디버거로 역분석하여

다시 Hand-ray로 복원하는 연습을 하면 좋겠다. 짧으면 한 달, 많게는 두 달까지

여러분이 적당하다고 느낄 때까지 복원 연습을 꾸준히 하다보면 어셈블리어코드가 자연스럽게 눈에 들어오는데

그 정도면 성공이다.


기본적인 hand-ray 말고도 구조체와 포인터, 함수포인터를 이용한 바이너리를 역분석하여 hand-ray하는 것도 좋다.

강추한다!!!


출처 : http://shayete.tistory.com/entry/Assembly-C-Handray1?category=772631






참고 : http://pantom.tistory.com/385?category=679865