시스템 해킹

 1576, 1/79 회원가입  로그인  
   choboKing
   라이브러리 함수의 주소가 이상해요[codegate2014 nuclear]

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1826 [복사]


http://shell-storm.org/repo/CTF/CodeGate-2014-Juinor-Quals/nuclear/

시스템 해킹 관련 문제를 풀던 중 뭔가 이상해서 질문드립니다.
일단 문제는 codegate2014에 출제되었던 nuclear이고요
쓰레드를 해서 지역변수에 데이터를 받아오는 부분에서 bof취약점이 터지는거 같더군요.
실전같이 연습하기 위해 라이브러리 함수의 주소를 알아와 라이브러리 버전을 알아내는것부터 시도했습니다.
send, recv의 got을 읽어와서 알아내려고 했으나 어째서인지 실행중에 rop해서 읽어오거나 gdb로 확인한 주소와 ida,objdump로 알아낸 오프셋의 차이가 다르더군요
왜 이런걸까요......
(참고로 실행시킨 환경은 64비트 우분투입니다.)



  Hit : 4318     Date : 2016/12/17 09:05



    
phills0915 nuclear가 제가 알기로 32비트 바이너리인데 혹시 ida, objdump로 보신 라이브러리가 64비트용 라이브러리 아닌가요?
ldd ./nuclear를 해서 나오는 32비트 라이브러리를 보셔야 합니다
2016/12/17  
choboKing 조언 감사드립니다.
다시 확인해봤으나, ldd ./nuclear를 해서 나오는 32비트용 라이브러리가 맞더군요....
혹시나 하는 마음에 gdb로 info sharedlibrary를 해서 라이브러리의 주소를 확인 한 후에 got에 들어가 있는 주소들을 확인 해보니까 libc가 아니라 libpthread영역의 주소가 들어가 있더군요....
쓰레드 관련 함수들이 libpthread에 있는것은 이해가 되는데 send,recv같은 함수조차 libpthread에 있는것이 이해가 안되어 관련 정보들을 검색해 보는 중입니다....
2016/12/18  
jinmo123 ELF같은 경우에는 어떤 심볼을 불러와야 할 때 어떤 라이브러리에서 불러오는지는 따지지 않고 그 이름과 심볼의 버전(지정된 경우에만)으로만 찾아서 불러오기때문에 여러 라이브러리에서 같은 이름의 심볼을 정의한다면 그 라이브러리들 중 먼저 찾아지는 심볼을 불러옵니다. libpthread는 그걸 이용해서 send, recv 함수를 덮어쓴게 아닐까요? 2017/01/07  
choboKing 궁금하던 점이 해결되었습니다.
감사합니다.
2017/01/09