본문 바로가기

pwnable44

[HackCTF] (Pwnable) Offset 풀이 원하는함수를 물어본다. 함수리스트에는 one, two, print_flag 함수가 있다. 하지만 one 함수만 작동이 된다. main 함수다. which function ~~ 를 출력하고, [ebp-0x27] 에 입력을 받고, select_func 함수의 인자로 전달해 호출한다. [ select_func ] [ebp-0x2a] 에 0x1F (31d) 만큼 내가입력한 문자열을 복사한다. 그리고, "one" 과 비교를해서 같으면 [ebp-0xC] 에 one 함수주소를 넣고, [ebp-0xC] 를 eax 로 옮겨서 eax 를 호출한다. 이전 문제들과 다르게 NX, PIE 가 설정되어있고, RELRO는 FULL이다. FULL RELRO : GOT overwrite 를 방지한다. ( GOT 주소를 조작할수없다 ).. 2020. 3. 25.
[HackCTF] (Pwnable) Simple_Overflow_ver_2 풀이 문제파일 실행시, 데이터를 입력받고, 버퍼의 주소를 알려준다. 계속할수있고, n 을 누르면 종료한다. ida 로 열어보면, buffer : [rbp-0x88] 이란 걸 알 수 있다. 버퍼의 주소도 알려주니, 저번처럼 쉘코드 작성 후 , ret address 에 buffer 의 주소를 넣으면 된다. 메모리보호기법이 설정되어있지 않으니, ret address 를 덮어쓸 수 있다. 하지만, main함수를 분석하다보면, [ebp-8] 값이 입력한 문자열의 길이보다 작을때 buf 의 주소를 출력해준다. 쉘코드+DUMMY+buffer address 형식으로 payload 를 작성하면, [ebp-8] 에도 DUMMY 값이 들어가게된다. DUMMY 를 a 로 채운다면, [ebp-8] : 0x61616161 이 들어가서.. 2020. 3. 21.
[HackCTF] (Pwnable) x64 Simple_size_BOF 풀이 문제를 다운받고, ida 로 열어보면, 문자열을 출력하고, buf 의 주소를 알려주고, buf 에 gets 로 입력을 받는다. 요로케 별다른 메모리보호기법이 적용되어있지 않다. 함수목록에는 별다른함수가 없고, 버퍼의 주소를 알기때문에, 버퍼에 쉘코드를 작성한뒤, DUMMY 를 채워넣어 ret address 를 조작해보자 [ 1. 쉘코드 ] https://blog.kimtae.xyz/28 쉘코드 메모 32bit (1)가장 기본적으로 쉘을 띄우는 코드 \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80 \x6a\x68\x68\x2f\x2f\x2f\x73\x68\x2f\x62\x69.. 2020. 3. 21.
[HackCTF] (Pwnable) x64 Buffer Overflow 풀이 파일을 다운받고, ida로 열어보면, 함수리스트를 볼 수가 있다. 주의깊게 봐야할 함수는 main 과 callMeMaybe 이다. [ main ] scanf 로 문자열을 입력받아 Hello %s 로 출력해준다. Buffer : [rbp-0x110] [ callMeMaybe ] 쉘을 실행시켜준다. scanf 에서도 BOF 가 일어날수있다. [스택] 낮은주소 [buffer+0x110] [rbp] [ret address] 높은주소 ret address까지 dummy 값으로 채운뒤, ret address에 callmemaybe 함수의 주소를 쓰면 되겠다. [ payload ] DUMMY(0x110 + 8 )+ callmemaybe 주소 주소가 8바이트로 표현된다는것을 유의하며 exploit 코드를 짜보자 1 2.. 2020. 3. 21.