
[Pwnable.kr] 3번 bof
2021. 4. 1. 17:31
Wargame/Pwnable.kr
func() 함수에서 gets 함수를 통해 입력을 받는데, 입력 크기를 지정하지 않아 버퍼의 크기인 32 byte 보다 더 입력을 받아 overflow가 발생하는 모습이다. 오버 플로우를 통해 key 값을 0xcafebabe로 바꿔주면 쉘을 실행할 수 있을 것이다. 그렇다면 offset을 구해보도록하자. func() 함수에서 두번째 call 하는 부분이 gets 함수가 실행되는 부분이다. 이때, overflowme를 인자값으로 주기 때문에 코드 위쪽을 보면 overflowme의 주소를 알 수 있다. ebp - 0x2c로 ebp로부터 44만큼 떨어져 있다. 따라서 offset은 44 + 4(SFP) + 4(RET) = 52이다. 따라서 payload는 다음과 같을 것이다. "A"*52 + "\xbe\xba..

[HackCTF] Basic_Bof - Simple_Overflow_ver_2
2021. 3. 13. 23:57
Wargame/HackCTF
1. 문제 1. 먼저 데이터 입력을 받는다. 2. buf 의 주소를 출력하고 입력받은 데이터도 출력한다. 3. 다시 실행할 건지 묻는다. 4. y를 입력하면 다시 데이터를 입력받게 되고, 동일한 주소를 출력한다. 5. 프로그램을 종료하고 다시 실행시키면 버퍼의 주소가 다르게 나온다. 2. 문제 의도 파악하기 scanf 입력 시 입력값 검증을 하지 않기에 bof를 일으켜 RET를 변경하면 될 것 같다. 즉 payload는 다음과 같을 것이다. Payload = "Shell code" + dummy 값 + buf의 주소 그리고 프로그램이 실행될 때 buf의 주소가 leak이 되기 때문에 exploit 코드에서 구해서 전달하면 될 것이다. 그렇다면 이제 offset을 구해서 중간에 그만큼의 dummy 값을 주..

[HackCTF] Basic_Bof - 내 버퍼가 흘러넘친다!!!
2021. 3. 11. 15:36
Wargame/HackCTF
1. 문제 의도 파악 지금 read와 gets 함수로 입력을 두 번 받고 있다. 그리고 gets 함수의 경우, 입력값 검증을 하지 않기에 buffer 크기인 20보다 더 크게 넣어 return address를 바꿀 수 있을 것이다. 그래서 쉘 코드를 어디에 넣을까 생각하다가, read 함수로 입력을 받는 name에 쉘 코드를 삽입하고 버퍼 s에 더미값과 name의 시작 주소를 넣어 쉘코드를 실행해보려 한다. 2. offset 구하기 name의 경우 50byte만큼 입력을 받는다. 따라서 쉘코드를 넣고 그 앞 뒤에 nop을 채워주면 될 것으로 생각된다. 그런데, 이때 name은 bss 영역이기 때문에 ASLR의 영향을 받지 않는다. 따라서 nop을 주지 않고, 쉘코드만 채워도 된다는 결론이 나온다. 그리고..