HanJeouk의 개인공부 블로그


gets 함수의 취약점을 이용하면 풀 수 있을 것 같다.

gdb로 main 함수를 보니 이렇게 나와있다 main+21에 브레이크 포인트를 걸고 실행시킨 후 버퍼의 시작부분과 sfp의 시작부분을 빼줘서 버퍼의 크기를 구하면?

72라고 보니 더미가 있는듯? 그럼 버퍼(64byte)+더미(8byte)+sfp(4byte)+ret(4byte)로 되어 있는게 아닐까 싶다.

이제 win 함수의 주소를 구하면

시작주소를 쓰자 리틀엔디안이니까 \xf4\x83\x04\x08이 되시겠다.

이제 페이로드를 짜자.


'Wargame > Protostar' 카테고리의 다른 글

Protostar Stack6  (0) 2017.04.05
Protostar Stack5  (0) 2017.04.05
Protostar Stack3  (0) 2017.04.01
Protostar Stack2  (0) 2017.03.29
Protostar Stack1  (0) 2017.03.22

Stack3는 fp에  win함수의 주소값을 넣어서 푸는 문제다.


먼저 win 함수의 주소값을 알아내기 위해여 GDB를 사용했다.

win 함수의 시작주소는 0x08048424이다.

버퍼의 크기를 알아보니 64바이트였다. 그래서 64개의 값을 넣은 다음 win 함수의 주소를 넣는다면 fp에 win 함수의 주소가 들어갈 것이다.


'Wargame > Protostar' 카테고리의 다른 글

Protostar Stack5  (0) 2017.04.05
Protostar Stack4  (0) 2017.04.02
Protostar Stack2  (0) 2017.03.29
Protostar Stack1  (0) 2017.03.22
Protostar Stack0  (0) 2017.03.20

문제의 코드를 보면 getenv라는 함수의 값을 variable에 저장하고 나중에 strcpy 함수를 이용해 buffer에다가 variable 값을 저장한다. 아마 여기서 취약점이 발생할 것 같은데 환경변수에다가 코드를 짜서 나중에 버퍼에 복사되었을 때 버퍼 값이 꽉 채워지고 그 다음에 0x0d0a0d0a도 넣어준다면 BOF가 되어 modified 값에 들어가서 성공할 수 있을 것이다.

그냥 코드를 써 넣는다면 bad variable name 이라고 뜰 것이다. 그래서 나는 문자열로 받게 코드 사이에 ""을 추가했다. 이게 맞겠지? 

성공하면

ㅎㅎ 끝

 

'Wargame > Protostar' 카테고리의 다른 글

Protostar Stack5  (0) 2017.04.05
Protostar Stack4  (0) 2017.04.02
Protostar Stack3  (0) 2017.04.01
Protostar Stack1  (0) 2017.03.22
Protostar Stack0  (0) 2017.03.20