반응형
add, misalignment 둘 다 비슷한 성격의 문제라서 같이 쓴다.
add 바이너리를 IDA에 올리면 main함수에 다른 사족은 제외하고 while 문 하나를 볼 수 있다.
요약하면 숫자 3개를 받아서 첫번째와 두번째 숫자를 더하여 array의 세번째입력 숫자 값의 인덱스에 저장하고 출력하는 로직이다.
플래그를 얻어낼 수 있는 함수는 win() 함수! 주소는 0x400822 10진수 정수로는 4196386 이다.
이제 단서들을 모았으면 어떻게 main함수에 없는 win 함수를 실행할 수 있을지 고민해보자.
고민하다보니 원래크기인 array[11]을 벗어나서 [-1] , [12] , [13] , .... 까지 입력이 가능하다는 것을 발견할 수 있었다.
지역변수들을 고려하여 스택 구조를 파악하면 array[11]에 canary, array[13]에 ret가 담겨져 있음을 알 수 있다.
canary는 뭐 딱히 상관은 없고 ret에 win() 함수 주소를 덮어씌우면 되겠다..
add 는 끝...
misalignment 는 main 함수가 add 와 유사하게 되어있다.
사실 위 add를 이해했다면 설명할 내용이 별로 없다...
인덱스랑 주소갖고 조금 바꾼게 전부라 add를 이해했다면 misalignment도 쉽게 풀 수 있을 것이다...
반응형
'<Wargame & CTF> > Pwnable.xyz' 카테고리의 다른 글
[Pwnable.xyz] note (0) | 2020.07.31 |
---|---|
[Pwnable.xyz] Game (0) | 2020.05.31 |
[Pwnable.xyz] UAF (0) | 2019.12.30 |
[Pwnable.xyz] GrownUp (0) | 2019.12.29 |
[Pwnable.xyz]sub (0) | 2019.01.06 |