pwnable 7번 문제인 Simple_Overflw_ver2 이다.

 

입력을 받고 그대로 출력을 해주는데, 위치는 0xffcd43b0 으로 고정되어 있는 것을 확인할 수 있다.

 

32비트 ELF 파일, 적용된 보호기법은 없다.

 

NX-bit도 없고 쉘을 주는 함수도 없다.

그리고 scanf로 s를 입력받으니 BOF 취약점이 있다.

또, s의 주소를 제공해주므로 s에 쉘코드를 넣고 더미값을 채워 ret을 다시 s의 주소로 덮으면 될 것s의  같다.

s가 ebp-88h이니 쉘코드를 넣고, 0x88 + 4(sfp) - 쉘코드의 길이 만큼 더미 값을 채워넣고, ret을 다시 s의 주소로 덮어써보자.

 

자 정리를 해보자.

1. scanf로 입력받아 BOF 취약점이 일어난다.
2. 매타임 입력할 때 s의 주소를 알려주므로 쓰레기값을 하나 넣어주고 주소값을 먼저 받는다.

3. s에 쉘코드(25byte)를 넣고 136(0x88)+4-25 = 115의 만큼 더미데이터를 넣어준다.

4. s의 ret에 s의 주소를 다시 넣자. 

 

좋아, 익스코드를 짜보자.

 

엄..

 

성공적으로 익스플로잇이 된다.

pwnable 6번 문제인 x64 Simple_size_BOF 이다.

 

buf의 위치를 출력해준다.

그리고 뭔가 입력을 받는거 같은데 아무런 변화도 일어나지는 않는다.

 

64비트 elf, 그리고 적용된 보호기법은 없다.

 

v4의 주소를 출력하고, v4에 입력을 받는다.

뭔가 쉘을 주는 다른 함수는 보이지 않는다.

v4는 rbp-6D30h, 즉, v4에 쉘코드를 넣고, 0x6D30 + 8(sfp) - 쉘코드의 길이 만큼 더미값을 채워넣어서 ret을 처음 제공해주는 v4의 주소를 넣으면 될 것이다.

좋아, 익스코드를 짜보자.

 

payload에 쉘코드는 31byte 짜리, v4_addr에 처음 제공해주는 v4의 주소를 저장한다.

그리고 0x6D30에 쉘코드 길이를 빼주고 sfp를 더한 뒤 ret에 v4_addr을 넣는다.

실행을 해보면..

 

성공적으로 익스플로잇이 된다.

pwnable 5번 문제인 x64 Buffer Overflow 이다.

 

입력을 받고 Hello와 내가 입력한 내용을 그대로 출력해준다.

 

제목 그대로 64비트 elf 파일이고, NX-bit가 걸려있으니 쉘코드를 실행 못하고, RELRO도 걸려있으니 got overwrite 도 못한다.

scanf로 s에 문자열 입력을 받는다.

더미값으로 채워서 ret을 덮을 수 있을 것이다.

그럼 ret에 넣을 뭔가 주소를 찾아야하는데..

callMeMaybe 함수가 보였다.

보다시피 쉘을 준다.

callMeMaybe 함수의 주소를 확인했다.

64비트 환경에서 sfp는 8바이트다.

그리고 s의 위치는 rbp-110h이다.

즉, s에 0x110 + 8(sfp) 만큼 더미데이터를 입력하고, callMeMaybe 함수의 주소로 ret을 덮어쓰면 될 것이다.

0x110 = 272(10)

272 + 8 = 280

p callMeMaybe = 0x400606

익스코드를 짜보자.

 

성공적으로 익스플로잇이 된다.

+ Recent posts