본문 바로가기

[System] Gadget

@rn1p4st2023. 2. 3. 23:59
반응형

Gadget의 본래의 개념은 프로그램 상에서 코드 조각을 지칭하였으며, 프로그램 내에 존재하는 명령어 조각.

 

기존 프로그램에 존재하지만 libc파일에도 존재하며, ret로 끝나는 연속된 명령어들을 의미.

 

하는 함수의 인자가 3개 일 경우 : "pop; pop; pop; ret"
호출 하는 함수의 인자가 2개 일 경우 : "pop; pop; ret"
호출 하는 함수의 인자가 1개 일 경우 : "pop; ret"
호출 하는 함수의 인자가 없을 경우 : "ret"

참고 : https://hg2lee.tistory.com/entry/%EC%8B%9C%EC%8A%A4%ED%85%9C-Gadget-%EA%B0%80%EC%A0%AF


Gadget 구하는 방법

1. ROPgadget 활용

설치 방법

$ python3 -m pip install ROPgadget --user

--re 옵션을 사용하면 정규표현식으로 가젯을 필터링

ROPgadget --binary (파일명) | grep '(찾을 가젯)'

사용 예시

$ ROPgadget --binary ./rtl --re "pop rdi"

 

2.objdump 이용

objdump -d "파일명" | grep -B(숫자) "가젯명"

-d 는 파일을디스어셈블 작업할 때 사용하는 명령어고, 

grep 뒤에 붙어있는 -B(숫자) "패턴이 매치된 각 라인기준으로 (숫자)만큼의 줄을 출력"의 기능을 가지고 있습니다.

 

대충 둘을 같이 쓰면

 

파일을 디스어셈블해서 그 안에 내가 찾아달라고 했던 가젯이 있으면 걔를 기준으로 (숫자)줄 만큼 출력해줘

 

참고 : https://dokhakdubini.tistory.com/51

반응형
rn1p4st
@rn1p4st :: 푸들푸들

RECORD STUDY