전에 이야기 했던데로 libc 와 rop 관련해서 적어봅니다
1. Libc
먼저 elf 를 통해서 elf 혹은 libc 파일을 엽니다.
요런식으로 아키텍쳐나 보호기법도 보여줘서 저는 checksec 보다 이걸 애용합니당.
만약 매핑된 시작 주소를 확인하고 싶으면 address 변수를 사용하시면됩니다.
함수의 주소 혹은 함수들의 리스트 등이 알고 싶을때는
로 알 수 있습니다.
elf 의 symbol 을 보고싶으면 symbols 딕셔너리 변수를, plt 를 보고싶으면 plt, got 면 got 를 사용하시면 됩니다.
특정 section 의 주소를 알고 싶으면
이런식으로 사용하지만, bss 같은경우는 bss( ) 로 바로 알아올 수 있습니다.
이때 entry point 를 확인하고싶으면
로 확인할 수 있습니다.
특정 문자열을 찾아 그 주소를 가져 오고 싶을때는
다시 보호기법을 확인하고 싶을때는
libc 파일을 include 하고싶으시면
이정도가 되겠습니다. 사실 ELF( FILENAME ) 로 불러와서 plt, got, symbols 말고는 다 잘 안씁니다....ㅎㅎ
2. ROP
이젠 ROP 에 대해 알아봅시다.
먼저 ROP 를 사용하기 위해서는
먼저 row( ) 함수로 rop 스택을 쌓을 수 있습니다.
여기서 unpcak 으로 문자열을 little endian 으로 만들수 있는데 이를 이용해서 스택에 문자열을 쌓을 수 있습니다.
제가 느꼈을때 pwntools 가 개사기인점 하나 나갑니당..
바로 rop.FUNCTION_NAME( ARGV ) 로 plt, ppr 등등을 구하지 않고 알아서 rop 스택에 쌓아줍니다.
이건 아무리봐도 개사기....
또한 저 rop 에서 함수를 호출할때 elf 의 symbols 를 참조해서 함으로, leak 후 offset으로 함수주소를 계산하고 저 symbols에 넣어주면 사용할 수 있습니다.
이번 사용법에 전체적인 예시를 대충 들어보자면
이런식으로 될거 같습니다. 물론 테스트는 안해봐서 안될수도 있습니다....ㅎㅎ
다음에는 pwntools의 사기중 하나 shellcraft에 대해서 알아봅시당
'Analysis' 카테고리의 다른 글
HTTP 프로토콜 구조 (0) | 2017.12.11 |
---|---|
syscall 을 이용한 rop (3) | 2017.11.06 |
Full Relro 우회법 (0) | 2017.10.15 |
Pwntools 기본적인 사용법 - 2 (0) | 2017.10.11 |
PPR 없이 ROP (0) | 2017.09.28 |