728x90
반응형
system 함수로 익스플로잇 시 간혹 제대로 코드를 작성하였음에도 불구하고 segmentation fault 오류가 발생하는 경우가 있다.
1. 왜 그런지 알아보고
2. ret gadget 추가 시 왜 작동되는지 알아보자.
2022.07.19 당일 clear.
- 왜 그런지 알아보고
system 함수 내에 movaps 명령어가 있기 때문.
movaps = mov aligned packed values이며 한번에 데이터를 다량으로 옮길때 사용되며 그 크기는 16 byte이다.
그래서 데이터들이 16byte로 묶을 수 있는가를 확인하기 때문이다. - ret gadget 추가 시 왜 작동되는지 알아보자.
movaps로 16 byte씩 묶인다고 가정했을때 seg. fault가 뜬다는 것은 8 byte의 남는 (또는 모자란) 데이터가 발생한다는 의미이다. 그렇기에 nop gadget을 추가하여 8 byte를 뒤로 밀어버리면 16 byte씩 묶인다.
그렇게 사용되는 nop sled gadget이 ret gadget이다.
system 함수를 사용하여 익스플로잇 한다는 의미는 페이로드가
(pop rdi, ret gadget) + (&/bin/sh) + (&system)
이며,
어셈블리어 ret의 역할은
pop rip, jmp rip 이기 때문에 이를 묶어주면
(ret) + (pop rdi, ret gadget) + (&/bin/sh) + (&system)
= (pop rip, jmp rip) + (pop rdi, ret gadget) + (&/bin/sh) + (&system)
가 되고, pop rip 시 어차피 pop rdi, ret gadget의 주소를 가져오기 때문에 nop sled 역할을 하는 것이다.
728x90
반응형
'To do list > Complete' 카테고리의 다른 글
for "one" - rao (0) | 2022.11.16 |
---|---|
[dreamhack] basic_exploitation_003 (0) | 2022.08.01 |
plt와 got (0) | 2022.07.20 |
[Root-Me] ELF x86 - Stack buffer overflow basic6 : /bin/sh 주소 찾아 넣어서 실행해보기. (0) | 2022.07.14 |
[Root-Me] ELF x86 - BSS buffer overflow : python 코딩해서 풀어보기. (0) | 2022.07.12 |