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 버퍼 확인 못함
'System Hacking' 카테고리의 다른 글
[드림핵] fho 풀이 - 티스토리 (0) | 2023.07.25 |
---|---|
[드림핵] basic_rop_x86 풀이 - 티스토리 (0) | 2023.07.22 |
[드림핵] rop (return oriented programming) 풀이 - 티스토리 (0) | 2023.07.21 |
[드림핵] Return to Library 풀이 - 티스토리 (0) | 2023.07.19 |
[드림핵] ssp_001 풀이 - 티스토리 (0) | 2023.07.16 |