감자 텃밭

basic_exploitation_001 본문

pwnable

basic_exploitation_001

g2h 2021. 7. 22. 15:12

이번에는 basic_exploitation_001문제를 풀어봤다.

basic_exploitation_000 문제보다 오히려 더 쉬운 문제인 거 같다.

해당 문제도. c파일과 함께 주어졌다

먼저 프로그램을실행시켜보았다.

프로그램을 실행시키면 특정 문자열을 입력받을 수 있게 되어 있고 문자열을 입력하면 아무것도 일어나지 않는다.

해당 문제의 메모리 보호 기법을 확인해 보았다.

NX가 걸려있는 걸로 봐서 스택상에서 쉘 코드를 실행시킬 수 없을 거 같다.

이번엔 같이 주어진. C파일을 확인해보았다.

이전 문제와 유사하지만 이번엔 read_flag 함수가 존재하고 해당 함수를 통해 system함수를 실행시키며 flag를 알려주는 거 같다.

나머지는 이전 문제와 유사하다 그렇다면 buf부터 ret까지의 거리 값을 구하고 더미 값을 채운 후 ret부분에 read_flag함수의 주소를 삽입하여 read_flag함수를 실행시키면 된다.

 

그럼 이제 해야 할 것은

1. buf -> ret까지의 거리

2. read_flag 함수의 주소 값

이렇게 두 개만 구하면 간단하게 풀 수 있다.

일단 gdb를 통해 buf부터 ret까지의 거리 값을 구하였다

11번 줄에서 gets를 통한 buf의 위치가 ebp-0x80이므로 128바이트이다 

 

그렇다면 128+4(rsp)를 통해 132바이트를 더미 값으로 채우면 된다

이제 read_flag의 주소 값을 구해보자

read_flag함수의 주소는 0x08 015b 9이다. 이제 구해야 할 것은 모두 구했으므로 공격코드를 작성하면 된다.

 

132바이트만큼 더미 값으로 채운 후 ret부분에 read_flag함수의 주소를 넣었다 그 후 실행시키면

성공적으로 flag를 획득할 수 있다.

'pwnable' 카테고리의 다른 글

basic_exploitation_000  (0) 2021.07.22