시스템 해킹/ProtoStar로 처음 입문하기

[pwnable] 시스템 해킹 ProtoStar - Stack5 (PLT, GOT)

0x6b6569 2023. 2. 15. 19:26

 

이전에 풀었던 5번을 다른 방식으로 푼다.

 

바로 PLT, GOT를 이용한 풀이이다.

 

PLT와 GOT란?

PLT(procedure Linkage Table) : 외부 프로시저를 연결해주는 테이블, PLT를 통해 다른 라이브러리에 있는 프로시저를 호출 할 수 있다.

 

GOT(Global Offset Table) : PLT가 참조하는 테이블, 프로시저들의 주소가 들어있다.

 

함수 호출(PLT)    ->   GOT (실제 함수의 주소가 저장)   ->    처음일 때  ->  어떤 과정으로 주소를 가져옴 (생략)

함수 호출(PLT)    ->   GOT (실제 함수의 주소가 저장)   ->    두 번째      ->  첫 번째 호출에서 알아낸 주소

 

참고)

https://bpsecblog.wordpress.com/2016/03/07/about_got_plt_1/

 

PLT와 GOT 자세히 알기 1

Dynamic Linking 과정을 추적해 PLT와 GOT를 이해해보자 :) 시스템 해킹을 공부하시는 분들이라면 PLT와 GOT에 대해 알고 있을 것입니다. 이제 막 시스템 해킹 공부를 시작한 분들도 한 번 쯤 들어보셨을

bpsecblog.wordpress.com

 

 

            STACK                                                                                STACK

---------------------------------                                                  ---------------------------------   

 

 

               BUF                                                                                    BUF    

 

 

---------------------------------               --------------->               ---------------------------------

                RBP                                                                                   RBP 

---------------------------------                                                  ---------------------------------

         RET ADDR                                                                          SYSTEM

---------------------------------                                                  ---------------------------------

                                                                                            SYSTEM RET ADDR

                                                                                          ---------------------------------

                                                                                                    arg1  /bin/sh

---------------------------------                                                  ---------------------------------

 

 

휴 그리느라 힘들어따..

 

이제 system address 와 '/bin/sh'의 address를 gdb를 통해 알아보자!

 

 

오예 얻었다

 

이제 위에 그림과 같이 payload 를 작성해보자

 

위 그림처럼 페이로드를 완성했다.

 

접속완료!!!