Information Security

[FTZ] Level 11 본문

INTERLUDE/System Hacking

[FTZ] Level 11

sohexz 2021. 11. 18. 23:11

Level 11

 

지금까지의 문제와 다르게 attackme가 존재하는 걸 볼 수 있다

 

코드를 해석해보자

 

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[] )
{
        char str[256];

        setreuid( 3092, 3092 );
        strcpy( str, argv[1] );
        printf( str );
}

 

배열 str가 존재하고 

설정한 권한으로 권한을 바꿔주고

argv[1]을 str에 복사해준 다음

str을 출력해준다

 

문제점: str은 256의 크기인데 입력값의 크기를 지정해주고 있지 않다

=> 버퍼오버플로우의 문제

 

 

 

attackme를 읽어보자

이상한 글자가 나온다...

 

 

gdb를 이용해 attackme 프로그램을 디버깅해보자

=> gdb [프로그램명]

 

disas main 으로 내부를 보자

 

 

여기서 3번째 줄을 살펴보자

0x08048473 <main+3>:    sub    $0x108,%esp

 

0x108을 10진수로 변환시켜주자

264 가 나온다

 

264 = 256(str의 크기) + 8(쓰레기 값)

 

 

참고)

스택의 기본 구조

- Buffer + sfp[4byte] + ret[4byte]

 

Buffer : 데이터가 저장되는 공간.

SFP

- leave 시켜 ret로 돌아갈 주소를 ebp에 불러온다.(pop ebp로 4바이트를 뛴다.)

mov esp, ebp

pop ebp

ret : 리턴

 

출처: https://nekoplu5.tistory.com/35 

 

256(Buffer) +8(dummy)+4(SFP)+4(RET) 이렇게 구성이 되어 있고 그림으로 나타내면

 

낮은 주소

 

str[256]

dummy[8]

SFP[4]

RET[4]

 

높은 주소

 

이렇게 나타낼 수 있다

 

25바이트 쉘코드를 사용할 것이다

\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

 

쉘코드가 25바이트이므로 RET을 제외한 268 byte에서 25 byte를 빼준다

268-25 = 243

 

243 byte에  NOP을 의미하는 \x90 값을 채워주자

 

NOP을 넣어주는 것을 NOP Sled라고 한다

NOP Sled를 사용하는 이유: 바로 쉘코드를 올려주면 항상 쉘코드의 시작 주소에서 시작한다는 보장이 없기 때문

 

=> 프로그램이 실행되면서 아무 곳이나 참조하더라도 NOP을 많이 넣어주면 쭉 미끄러지다가 쉘코드가 실행된다

 

attackme 파일에는 SetUID가 걸려있기 때문에 에러가 난 것 같다

 

cp 명령어를 이용하여 attackme 파일을 다른 파일로 복사하여 실행해보자

 

53 코드에서 나간다고 하니 b*main+53에 걸어주고 run 할 때 NOP*239 + a*25 + b*4를 해주자

 

실행 성공

 

하지만, 스택의 주소가 자꾸 바뀌어 정확한 문자열 str이 있는 스택의 주소를 지정하기 어렵다

이를 우회하기 위해서 환경변수에 익스플로잇 코드를 담아두고, RET을 해당 환경변수가 있는 메오리로 바꾸어준다

 

먼저 환경변수 SHELLCODE에 쉘코드를 저장시켜놓자

해당 환경변수 값의 주소를 출력해주는 c코드를 작성한다

위 코드를 컴파일해주고 여러번 실행시켜보자

환경변수 값의 주소는 변하지 않는다!해당 주소 값을 RET주소에 씌우려면 A를 268개 덮고 환경변수 주소 값을 써야 한다

 

이 방법이 맞을 텐데 왜 안 될까..?

`,'," 구분을 잘해줘야 한다

 

저렇게 코드를 입력하면 쉘이 뜨고 my-pass를 통해 비밀번호를 얻을 수 있다

 

다음에 다시 시도하도록 하겠다

 

11부터 너무 난이도가 어려워져서 블로그의 참고를 많이 받았다.. 

'INTERLUDE > System Hacking' 카테고리의 다른 글

BOF 스터디  (0) 2022.09.20
[FTZ] Level 12  (0) 2021.11.23
[FTZ] Level 10  (0) 2021.11.11
[FTZ] Level 9  (0) 2021.11.09
[FTZ] Level 8  (0) 2021.11.04