코드를 보면 "Hell, World\n"를 출력하고, read 함수를 통해 입력을 받는 걸 알 수 있음
버퍼의 크기는 0x10이지만 read 함수로는 0x100만큼 입력 받을 수 있기 때문에 bof 터트릴 수 있다.
쉘을 따기 위해서는 system 함수를 호출해야 하는데, system 함수의 주소를 알 수 없으므로 system 함수의 주소를 구해야 함
# leak
24바이트의 문자를 채우고 실행할 함수의 인자을 먼저 적어줌
① pop rdi; ret 가젯
② write 함수 인자
③ write 함수의 주소
▶ write(1, read_got, rdx 값) : read함수의 주소 출력
# input "/bin/sh" → bss
system 함수의 인자인 "/bin/sh\x00"를 bss 영역에 적어주어야 함.
① pop rdi; ret; 가젯
② read 함수 인자
③ read 함수의 주소
▶ read(0, bss + 0x100, rdx의 값)
다시 main 함수를 호출해서 bof를 터트릴 기회를 만듦.
24바이트의 문자를 채우고 실행할 함수의 인자을 먼저 적어줌
① pop rdi; ret 가젯
② system 함수 인자
system 함수의 주소
'Layer7' 카테고리의 다른 글
DefCON#22 #2 (0) | 2021.08.06 |
---|---|
BaskinRobins31 (0) | 2021.08.04 |
ropasaurusrex (0) | 2021.08.04 |
Format String Bug : frop2 (0) | 2021.08.04 |
Dreamhack : basic_rop_x64 (0) | 2021.08.03 |