본문 바로가기
security/시스템

Protostar - Stack1

by aristia 2020. 9. 22.

이번에는 Protostar Stack1번 문제 풀이를 진행하겠다.

Protostar 문제는 다음 사이트에서 확인할 수 있다.

old.liveoverflow.com/binary_hacking/protostar/stack1.html

 

Stack 1 - LiveOverflow

This video introduces http://exploit-exercises.com, how to connect to the VM with ssh and explains what setuid binaries are.

old.liveoverflow.com

 

1. 문제 확인

 

 

문제를 보면 다음과 같이 설명이 나와있다.

 

이 수준에서는 프로그램의 특정 값으로 변수를 수정하는 개념,
그리고 변수가 메모리에 어떻게 배치되는지를 살펴본다.

 

if(argc == 1) { errx(1, "please specify an argument\n"); }

여기서 argc가 1개이면 걸린다. 뛰어쓰기로 구분하는 것 같다.

 

strcpy(buffer, argv[1]);

여기서는 argv로부터 데이터를 받는다.
strcpy는 취약한 함수라서 버퍼오버플로우가 많이 되기도 한다.
 

 

argument 뒤에 데이터를 넣어라는 의미이다.

 

실행이 된다. 여기서는 2개를 넘겼다.

여기서 argv[1]는 1234를 의미한다. stack1은 argv[0]이다.

 

전에도 언급했듯이 스택의 구조는 다음과 같이 나온다.

 

modified = 0;
modified 0을 세팅하고 한 번도 바뀐 적이 없다.

if(modified == 0x61626364) {
printf("you have correctly got the variable to the right value\n"); }
else { printf("Try again, you got 0x%08x\n", modified); }

그런데 바뀌는 것을 원하는 상황이다.

여기서  0x61626364 위치를 알아야 하는 상황이다. 
그래서 gdb를 켜서 확인해본다.

 

여기서 cmp  eax 0x61626364를 찾을 수 있다.
이 데이터는 modified로부터 가져왔 테니까

modified는 현재 esp+0x5c의 위치라는 것을 파악할 수 있다.

strcpy에서는 두개의 인자가 필요로 하는데, 

eax에서 DWORD PTR(esp)에서 가져온 것을 확인할 수 있다.

buffer은 esp + 0x1c이다.

buffer = esp + 0x1c
modified = esp+0x5c

 

그래서 프로그래머용 계산기로 길이를 계산해보면 이렇게 나오는데,
10진수로 봐야 하니까
a를 64개 넣으면 modified 간다는 것을 확인할 수 있다.

 

그래서 이렇게 64개의 A를 넣어준다. 
그런데 int가 4바이트이므로 추가로 BBBB를 넣어준다.

 

이를 넣고 실행하기 위해서 gdb ./stack1을 적어준다.

 

여기서 0x61626364의 위치가 main + 71번의 위치이다.
그래서 breakpoint를 b *main+71로 걸어주었다.

그 후 이렇게 값을 넣었다.

 

그런데 61626364가 나오려면 dcba가 나와야 하므로
A*64 + dcba를 넣어주었다.

그 후 info reg &eax를 확인하니 찾는 것인 0x61626364가 나오는 것을 확인할 수 있다.

 

continue를 통해
you have correctly got the variable to the right value를 출력할 수 있음을 한번 더 확인할 수 있다.

 

최종적으로 다음과 같이 넣으면 문제가 풀린다.

'security > 시스템' 카테고리의 다른 글

Protostar - Format 3  (0) 2020.11.05
Protostar - Format 2  (0) 2020.11.05
Protostar - Format 0  (0) 2020.11.03
Protostar - Stack2  (0) 2020.09.22
Protostar - Stack 0  (0) 2020.09.19

댓글