삼전동해커 2021. 1. 2. 15:27


buf의 크기는 0x40만큼이고, read함수를 이용해 0x400만큼을 buf에 입력한다. buf는 0x40만큼 받을 수 있는데 0x400만큼 입력하니 취약함.


write함수로 fd가 1이니 sizeof(buf)만큼 buf를 출력한다.



ROP는 현재 수행중인 프로그램 코드 안에 존재하는 함수가 ret에 닿기 전에 우리가 넣어놓은 어셈블리어들을 먼저 실행시키는 방법이다.


ROP를 알기 위해서는 먼저 plt와 got의 개념을 알아야한다.


https://watchout31337.tistory.com/152?category=906340


간단히 말하면 plt는 got의 위치를 가리키는 주소, got는 라이브러리에 있는 함수의 위치를 가리키는 포인터 주소.

라고 생각 할 수 있겠다.


plt -> got -> 라이브러리 내 함수 주소

plt와 got는 한번이상 실행되어야지 알 수 있다.


이 주소들을 이용해 got를 다른 got로 바꿔 실행해 원하는 주소를 실행할 수 있다.

예를 들어 put("/bin/sh")에서 put got대신 system got를 넣으면 system("/bin/sh")가 실행되게 되는 것이다.