티스토리 뷰

포너블/포너블 공부

ROP에 대해

삼전동해커 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")가 실행되게 되는 것이다.




 

'포너블 > 포너블 공부' 카테고리의 다른 글

SSP(canary)  (0) 2021.01.18
RTL에 대하여  (0) 2021.01.11
pwntools 이용하기  (0) 2020.12.01
PLT(Procedure Linkage Table),GOT(Global Offset Table)  (0) 2020.09.15
execve() 함수  (0) 2020.09.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함