write-up/ctf.j0n9hyun.xyz 2

[j0n9hyun] Unexploitable 2

1번과 마찬가지로 취약점은 그냥 준다. system() 함수의 plt도 그냥 준다. 1번과 다른 점은... "sh\x00"의 고정 주소가 없다는 점이다.고정주소에 "/bin/sh\x00"를 올리고 이를 system() 함수의 매개변수로 주면 된다. 시나리오는 다음과 같다. 1. 오버플로우 시킬 때 rbp를 bss로 넣어주고, 취약한 함수를 다시 부른다.2. 이때 인풋을 bss에 받기 때문에 "/bin/sh\x00"를 올리고 바로 system() 함수를 부른다. rbp를 bss로 덮는 이유는, 두 번째 fgets() 함수 호출시 입력을 bss에 넣기 위함이다.fgets() 함수가 입력 받을 때 입력 버퍼 주소를 다음과 같이 rbp를 기준으로 잡는다. 첫 번째 오버플로우시 rbp를 bss+0x10으로 잡아주..

[j0n9hyun] Unexploitable 1

main() 함수에서 fgets() 함수로 입력을 받는데, 일단 취약점을 주고 시작한다. 보다시피 바이너리에는 고정 주소에 "sh\x00"이 박혀있다. 확인 한 번 더. 그 이유는 fflush() 함수 때문인데, 바이너리 안에는 사용하는 라이브러리 함수 이름들이 다음과 같이 박혀있다. fflush의 문자열 일부가 "sh\x00"으로 인식되는 것이다.이 영역은 .dynstr 영역이며, objdump로도 확인 가능하다.objdump -h Unexploitable_1로 각 섹션을 확인한 모습이다. 5번에 .dynstr 영역이 보인다. 이 영역의 문자열을 긁으면 따란. 그리고 또 system()함수의 plt도 주어졌다. 필요한건 다 찾은 것 같다. pop rdi가젯으로 "sh\x00"주소를 rdi에 넣어주고, ..