소스를 보면 이전단계에서 ret이후 모든 스택영역을 싹다 날리는 코드가 추가됬다.


argv , 파일명 , 환경변수 , 버퍼 싹다 못쓴다. 유일하게 덮을 수 있는게 ret뿐이라 rtl도 안된다. ret만 가지고 


뭘 할 수 있을까 한참 생각하다 스택내에선 뭘 어쩌지 못하겠다 싶어서 다른영역에 뭔가 내가원하는 값들을


삽입할 수 있는게 있나 찾아보다 이런걸 발견했다.


환경변수 중에 LD_PRELOAD라는 값이 있는데 이 값은 프로그램이 메모리에 로딩되기 전에 메모리에 저장된다고 한다. 그럼 ret 이후의 스택영역이 아닌 그 이전영역에 값이 존재할거기때문에 초기화가 안된다.  



그럼 이제 LD_PRELOAD 환경변수에 쉘코드를 저장시켜야되는데 LD_PRELOAD에는 공유라이브러리 파일명을 저장시켜야 프로그램이 제대로 동작이 되기 때문에 먼저 공유라이브러리 파일을 만들었다.


c파일은 아무거나 하나 만들면되고 컴파일 시 해당 파일이 공유라이브러리 및 동적라이브러리로 사용되도록 -fPIC -shared 옵션을 추가해서 컴파일해줬다.

-fPIC : Position-Independent Code의 약자로 test.o파일을 동적라이브러리로 사용하도록 컴파일 하는 옵션

-shared : 공유 라이브러리로 만드는 옵션  



요렇게 만들어준 다음에 해당 파일을 LD_PRELOAD 환경변수에 적용시켜줬다. 이때 정확한 이유는 모르겠지만 파일경로를 절대경로로 해야 에러가 안났다.


여기까지되면 LD_PRELOAD가 저장된  영역 주소값을 찾아야되는데 이 영역은 프로그램의 스택보다 낮은 주소에 존재하므로 esp 레지스터를 기준으로 하위주소들에 쉘코드가 박혀있는 부분을 gdb로 찾았다. 



위의 영역에 쉘코드가 올라와있었고 대충 중간값줘서 익스했다.




'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글

LOB darkknight -> bugbear  (0) 2018.01.10
LOB golem -> darkknight  (0) 2018.01.09
LOB vampire -> skeleton  (0) 2018.01.09
LOB troll -> vampire  (0) 2018.01.09
LOB orge -> troll  (0) 2018.01.08
블로그 이미지

JeonYoungSin

메모 기록용 공간

,