티스토리 뷰

포너블/포너블 공부

pwntools 이용하기

삼전동해커 2020. 12. 1. 00:46

pwntools를 이용하면 좀 더 편하게 어셈을 분석할 수 있다고 한다.

예를 들어 gdb를 이용하면 직접 어셈을 분석해서 어디가 입력값의 시작이고, 변수의 위치를 파악해야 했는데 pwntools를 설치하면 이런 것들이 자동으로 분석된다.


이렇게 말이다.


일단 설치 방법은 

1.apt-get install python2.7-dev python-pip -> pwntools는 python2.7버전을 이용한다.

2.pip install pwntools

3.apt-get install libcapstone-dev

이렇게 설치하면 된다.


설치 완료 후 설치가 잘 됐는지 확인하는 방법은 파이썬을 실행해 주고


이렇게 모듈을 임포트해봐서 별 문제 없으면 잘 설치된 것이다.


이제 pwntools를 사용하는 방법을 알아보자. 

지금까지는 간단한 버퍼오버플로우 문제라서 그냥 한줄짜리 익스플로잇 코드만으로 문제가 풀렸었다. 하지만 이 방법을 배우면 더 다양하고 창의력 넘치게 문제를 해결할 수 있다.



1.연결하기

문제가 있는 서버에 연결을 하는 부분이다. 

외부 서버에 있는 문제에 연결하는 방법은 

remote()함수이다. 



이렇게 r이라는 변수를 선언해 줘야 한다. 

그리고 remote함수 안에 사이트 url과 포트번호를 적어준다.


외부서버가 아닌 내 컴퓨터에 있는 문제를 실행하고 싶으면 



이렇게 process함수를 사용해준다. 인자로는 파일을 넣어주면 된다.



2.데이터 받기

파일 실행의 결과값을 필요로 하는 경우에는 recv()함수를 사용한다.

recv(10)과 같이 인자로 전달한 수 만큼 문자열을 받아온다.


recvline()함수를 이용하면 한줄의 문자열을 읽어온다.



recvuntil()함수는 인자의 문자열이 나올 때까지 데이터를 받겠다는 의미이다.



이러면 buf = ( 까지만 값을 받겠다는 의미이다.


3.데이터 보내기

send()함수를 이용해 인자의 값을 전송한다.


sendline()함수는 한줄을 보내는 함수이다. recvline과 비슷.



4.packing관련 함수


p32()함수를 이용해 32비트 리틀 엔디안 방식으로 패킹을 해준다.

그냥 자동으로 리틀엔디안 방식으로 적어주는 함수인듯.



p64()는 64비트 리틀 엔디안 방식으로 설정해줌.


반대로 언패킹 해주는 함수도 있다.


u32()와 u64()인데 리틀 엔디안 방식으로 적혀있는 값들을 다시 주소형식으로 표현해준다.



마지막으로 항상 interactive()함수를 적어줘야 한다.



이 함수는 쉘과 직접적으로 명령을 전송,수신하는 함수이다. 

쉘과 데이터를 주고 받는 그런 함수인듯.



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

RTL에 대하여  (0) 2021.01.11
ROP에 대해  (0) 2021.01.02
PLT(Procedure Linkage Table),GOT(Global Offset Table)  (0) 2020.09.15
execve() 함수  (0) 2020.09.08
Return To Libc 기법  (0) 2018.07.31
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함