728x90

아직 완성되지 않은 글입니다. 경험이 많이 없거든요

 

stdout, stdin의 주소나 어떠한 libc안의 함수의 주소가 노출되었을때, libc_base의 주소를 구할 수 있습니다.

 

libc_base의 주소를 구하면, offset을 안다는 가정하에 libc내의 함수를 사용할 수 있습니다.

 

이걸 왜 알아야 하냐면,  모든 프로그램은 라이브러리 함수를 사용할때, ASLR이라는 기법이 사용되어 주소가 랜덤으로 바뀐다고 합니다. (libc덩어리 자체가 랜덤으로 움직입니다.)  이게 우회되는 이유는, 모든 주소가 랜덤으로 바뀌는게 아니라 전체가 하나의 랜덤값으로 움직이기 때문에 offset을 안다면 우회할 수 있습니다.

 

예를 들어 stdout의 주소값이 노출되었다고 하면, 

libc_base_addr = stdout_addr - libc.symbols['_IO_2_1_stdout_']

이처럼 구할 수 있습니다. 

 

참고 글

 

xerxes-break.tistory.com/302

 

pwntools를 이용해서 libc에서 함수 및 stdin,stdout 오프셋구하기

lib = ELF("라이브러리") lib.symbols['함수명'] 으로 offset값을 얻어올 수 있다. 여기서 stdout이나 stdin의 offset을 구할때 그냥 lib.symbols['stdout']이나 lib.symbols['stdin']으로 해서 offset을 구해서 s..

xerxes-break.tistory.com

stdout의 주소가 이상하게 생겼는데 저걸 어떻게 아냐고요?    

 

현재 제가 하는 공부들은 모두 오픈소스로도 가능한 난이도입니다. 구글링으로 해결됩니다! 

 

objdump -D [libc] | grep "키워드"

objdump 명령어 참고 글

 

m.blog.naver.com/PostView.nhn?blogId=s2kiess&logNo=220066239893&proxyReferer=https:%2F%2Fwww.google.com%2F

 

objdump 명령어

굳이 설명할 것도 없다. 오브젝트 파일을 덤프하는 툴이다.objdump는 무조건 하나 이상의 플래그 옵션을 주...

blog.naver.com

ASLR은 따로 해제를 할 수 있는 보호기법이지만, 지금 제가 푸는 문제들은 왠만하면 걸려있더라구요. 

 

ASLR을 우회하는 방법은 libc_base 입니다. 명심하겠습니다!

728x90

'pwnable' 카테고리의 다른 글

바이너리 파일을 다른 버전의 libc로 실행 (pwntool)  (0) 2021.04.01
one_gadget  (0) 2021.04.01
ROP(64bit)  (0) 2021.03.31
ROP(32bit)  (0) 2021.03.30
ROP에 대하여  (0) 2021.03.30

+ Recent posts