본문 바로가기

System Hacking

[드림핵] basic_rop_x64 풀이 - 티스토리

 

 

rop문제이고 64비트 환경이다

카나리는 없고 NX와 ASLR만 켜져 있는 상태이다

 

풀이 가능한 방법

 

1. ret2main (main함수 재호출)

 

2. got overwrite (got주소에 system주소 덮어서 해당 함수 재호출 -> main함수 재호출 x)

 

3. RTC (Return to CSU, 나중에 정리해야겠다)

 (대충 main함수를 실행하기 전 코드의 코드 조각들을 이용하는 기법)

 

 

코드 정적 분석

 

 

1. buf입력 시 BOF 발생

 

 

2. 첫 입력에서 사용 가능한 plt, got값

  - read_got

  - read_plt

  - puts_got

  - puts_plt

  - write_plt

 

3. read함수와 puts이용해서 libc주소 릭 가능

 

 

4. 입력을 한 번만 받으므로 ret2main이용해서 main 재실행

 

 

 

코드 동적 분석

 

 

 

buf위치 = rbp-0x40

 

 

근데 처음 풀때 puts 있는지 인지 못하고 write이용해서 품

 

필요한 정보들

 

 

 

write함수로 read 주소 호출 후 main으로 재복귀

 

read주소 이용 libc주소와 system, /bin/sh 주소 릭

 

(지금 보니까 write에 sizeof(write)한 것도 rbp값 까지 출력 되지 않도록 다 고려한거 같네 printf 안 쓴 이유인가)

 

 

다시 시스템 함수로 ret를 overwrite하면 끝

 

 

 

 

놓쳤던 것들 + 헷갈렸던 것들

 

1. plt, got개념 (got만 함수 한 번의 실행 후 쓰여짐)

 

2. 코드 꼼꼼히 안 봐서 puts 놓침

 

3. write이 출력하는 buf 버퍼 확인 못함