Protostar - Stack 4 (버퍼 오버플로우 공격 + 메모리 참조)

oolongeya

·

2021. 8. 25. 16:47

stack4.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
 
void win()
{
    printf("code flow successfully changed\n");
}
 
int main(int argc, char **argv)
{
    char buffer[64];
 
    gets(buffer);
}
cs

 

이번 코드는 특이한 것이 win주소를 덮을만한 함수가 보이지 않는다.

즉 매개가 없다는 것은 스택에 제일 먼저 들어간 ret 부분을 오염시키면 된다는 것이다.

 

 

메인 함수를 확인한 뒤 아래에 ret 이 보인다.

 

ret 부분에 브레이크 포인트를 걸어두고 패턴을 만들어서 사용하겠다.

 

ret 주소에 브레이크가 걸려있고, stack에서 첫번째 것을 가져와서 사용한다. 

즉 stack의 첫번째 주소의 값을 복사해서 오프셋을 확인해보면 된다.

 

72바이트 뒤에 win 주소를 넣어주면 될 것 같다.

 

 

disas win 으로 win의 주소를 확인해준다. 401132

 

pwn을 이용해서 페이로드 코드를 작성해준다.

 

어렵지 않게 해결할 수 있다.

반응형