2019. 5. 31. 05:56ㆍFTZ
먼저 저번에 f.t.z level 10에서 얻은 비밀번호를 이용하여 로그인을
해줍니다.
파일 리스트를 보니 특이한 파일 2개.
hint와 attackme라는 파일이 있네요.
다음은 권한을 상승시키고 실행시 매개변수를 str에 복사하고 출력해주는
프로그램 입니다.
setreuid() 함수는 사용할 수 있는 유저를 바꿔주는 함수라고 생각하시면
됩니다.
strcpy는 overflow 결함이 있는 함수인데 여기서 썼다는 것은
아마 overflow 취약점을 사용해야 할거 같아요.
또한, printf(str); 이라는 부분에서 문자열 포맷 코드가 없습니다.
format string attack(포맷 문자열 공격) 이렇게 두 가지의 취약점이 있다는 걸
알 수 있습니다.
이제 아까 수상 했던 attackme 파일을 실행해봅시다.
일단 attackme는 setuid가 걸려있는 파일입니다.
그럼 이제 attackme 파일을 실행해봅시다.
Segmentation fault가 뜹니다.
segmentation fault(세그멘테이션 결함)은 컴퓨터 소프트우에어의 실행 중에
일어날 수 있는 특수한 오류 중 한 가지 입니다.
세그멘테이션 결함은 프로그램이 허용되지 않는 메모리 영역에 접근을 시도하거나, 허용되지
않은 방법으로 메모리 영역에 접근을 시도 할 경우 발생합니다.
ex) 읽기 전용 영역에 어떤 내용을 쓰려고 시도하거나, 운영 체제에서 사용하는 영역에
다른 내용을 덮어쓰려하는 경우 이와 같은 오류가 일어날 수 있습니다.
./attackme 파일에 넘겨준 인자가 다시 반환되서 나옵니다.
뭔가 익숙하지 않으신가요?
바로 hint 코드의 동작과 일치합니다.
./attackme=hint.exe와 같다고 볼 수 있겠네요.
이제 새로운 hint에 있는 내용을 tmp로 복사하여 다른 파일을 만듭시다.
set disas intel은 intel 어셈블리 규격으로 보겠다는 얘기 입니다.
위와 같이 gdb를 켜줍시다.
그럼 다음과 같은 화면이 나오게 됩니다.
<main+3>을 보면 esp에 0x108이라는 숫자를 저장한다.
0x108은 264이다. 우리는 str을 256만큼 할당했는데 왜 그럴까요?
gcc가 버전이 높아지면서 dummy가 붙는다고 합니다.
그러므로 dummy의 데이터가 8이므로 264가 되는 것입니다!.
우리는 여기서 오버플로우를 사용하여
다음에 실행할 명령어의 메모리 주소인 RET에 내가 실행하고자 하는 코드를
집어 넣을 것입니다.
현재 스택 구조
str[256]
dummy[8]
SFP[4]
RET[4]
이므로 268(256+8+4=268)을 다 채운 다음에
환경 변수를 사용하여 풀어봅시다.
export [환경변수명]=$(python -c 'print "쉘코드"')
쉘코드
\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80
환경 변수를 등록하였으니 이제 환경변수의 주소를 얻어봅시다.
getenv(cosnt *char string);
getenv() 함수는 string이 가리키는 문자열과 일치하는 문자열을 찾기 위해 환경 변수
리스트를 탐색한다. string=value의 형태이다.
반환값
geteuv() 함수는 환경변수에서 값에 대한 포인터를 반환하거나 없다면 NULL을 반환한다.
이제 코드를 다 썼으니 컴파일 한 뒤 실행시켜 봅시다.
이제 이렇게 나온 주소를 아까 쉘코드와 같은 형태로 바꿔줄 것입니다.
0xbfffff55=\x55\xff\xff\xbf
뒤에서부터 2자리씩 가져와 \만 붙이면 됩니다.
일단 cd를 사용하여 attackme가 있는 곳으로 다시 돌아가봅시다.
그 후 아래와 같이 쓰면 바로 답이 나와요.!!!!
./attackme `python -c 'print "A"*268+"\x55\xff\xff\xbf"'`sh-2.05b$ my-pass
it is like this
'FTZ' 카테고리의 다른 글
Layer7 14과제 -F.T.Z level 12 풀이- (0) | 2019.07.09 |
---|---|
Layer7 13과제 -F.T.Z level 13 풀이- (0) | 2019.06.19 |
Layer7 09과제 -10 -F.T.Z level 10 풀이- (0) | 2019.05.23 |
Layer7 09과제 -9 -F.T.Z level 9 풀이- (0) | 2019.05.23 |
Layer7 09과제 -8 -F.T.Z level 8 풀이- (0) | 2019.05.23 |