[HackCTF] BOF_PIE
·
WriteUp/HackCTF
NX : Shellcode 실행 X PIE : 메모리 주소 랜덤화 →BOF로 문제를 풀어보자. 메인함수는 되게 간단하다. welcome()도 IDA로 까보겠다. welcome함수의 위치를 출력하고 v1에 입력을 받는모습. retrun에 있는 scanf에서 BOF가 일어난다. IDA로 어떤 함수가 있는지 보던 중 j0n9hyun이라는 함수를 발견했다. 이 함수가 FLAG를 출력하는 함수인 것 같다. 이번 문제에는 PIE가 걸려있지만 앞서 welcome()에서 welcome()함수의 위치를 알려준다. 즉, 함수들 간의 offset을 구해서 j0n9hyun()의 위치를 파악하고, BOF로 ret에 j0n9hyun()의 주소를 덮어주면 될 것 같다. offset은 gdb를 통해서 간단하게 구할 수 있다. exp..
[HackCTF] Offset
·
WriteUp/HackCTF
CANARY X → Buffer Overflow 가능 NX → 모든 공간에서 Shellcode 삽입 및 실행 불가 RELRO → GOT Overwrite 불가 PIE → 주소 랜덤화 BOF를 일으켜 문제를 해결해야 한다. main함수에서는 어떤 함수를 호출할 것인지 물어보고 입력받은 버퍼값을 select_func으로 바로 넘겨주는 모습이다. 입력받아온 함수의 이름이 one과 같으면 one()를 return, 아니면 two()을 return한다. strcmp(s1,s2)는 다음과 같은 출력을 만들어 낸다. 1: ASCII 코드 기준으로 문자열2(s2)가 클 때 0: ASCII 코드 기준으로 두 문자열이 같을 때 1: ASCII 코드 기준으로 문자열1(s1)이 클 때 one()과 two()는 특정 문자열을 ..
[HackCTF] Simple Overflow Ver 2
·
WriteUp/HackCTF
따로 주목할만한 보호기법은 안걸려있는 모습 입력받은 데이터를 저장하는 버퍼의 주소와 입력받은 데이터를 한 문자씩 출력하는 간단한 프로그램. Again을 물어보고 y를 입력으로 제공하면 다시 입력을 받을 수 있는 모습이다. IDA로 확인한 BOF 취약점은 scanf에 있다. 따라서 다음과 같은 방법으로 exploit을 시도할 수 있다. ① 버퍼의 주소를 먼저 파악한다. ② 해당 버퍼에 쉘코드를 삽입하고 return address를 버퍼의 주소로 덮어 BOF를 발생하게한다. gdb로 뜯어보면 ret이 어디 위치에 있는지 알 수 있다.( 140 바이트 이후) from pwn import * # context.log_level = "debug" #p = process('./Simple_overflow_ver_2..
d2n0s4ur
d2n0s4ur