LOB_10.vampire->skeleton
해킹/LOB 2016. 1. 22. 23:47
드디어 모든 argv를 다 memset해버렸다..
이것참 이제 어디에 쉘코드가 들어갈수 있을까 한참을 고민하다 찾아본 결과 argv[0] 이외에도 프로그램의 경로, 이름이 스텍 어딘가에 저장된다고 한다.
그럼 우선 전처럼 쉘코드를 경로로 가지는 심볼릭 링크를 만들어주자.
이렇게 해서 경로가 쉘코드인 심볼릭 링크를 만들었다. 자세한 설명은 http://satanel001.tistory.com/89 참조
gdb로 분석해보자.
어차피 메모리상 어디에 있는지 모르니 굳이 실행시키며 볼 필요 없이 main 시작부분에 bp를 걸고 쉘코드를 찾아봐야한다.
gdb로 메모리에서 특정 값을 검색하는 방법이 있다.
이렇게 하면 된다. find명령어를 제공하는 gdb도 있는 모양인데 잘 모르겠고... 나는 보통 이렇게 해왔다.
먼저 첫번째줄에서 x라는 변수에 0xbfff0000이라는 값을 집어넣고(이것보다 더 낮은주소에 있을리는 없다)
x의 주소를 증가시키면서 해당주소의 값이 쉘코드의 첫부분인 0x31b0c031과 일치할때까지 while문이 도는 방식이다.
그래서 쉘코드의 위치를 찾긴 했는데... 밑에 0x61이 잔뜩 있는걸 보니 여기는 argv[0]부분이다. 나중에 memset당할 부분이므로 사용할 수 없다. 아직 프로그램을 끝까지 실행하지 않아서 남아있는 것 뿐이다.
x의 초기값을 argv 뒷부분으로 잡아주고 다시 검색하니 0xbfffffd2부분에 정말로 쉘코드(파일명)가 들어있는걸 확인했다!!
스텍의 최대범위인 0xbfffffff에서 딱 4바이트의 null만 남겨두고 채워진걸 보니 항상 스텍의 최상단에 위치하는 모양이다.
이제 심볼릭링크를 원본파일에 걸어주고 0xbfffffd2를 리턴값으로 덮어주면 된다.
익스플로잇에 성공했다. LOB 절반 클리어... 이제부터는 풀어본적 없는 문제들이다. 차근차근 해보자.
끝-
'해킹 > LOB' 카테고리의 다른 글
LOB_번외.my-pass파일을 공격해서 한번에 마지막까지 뚫기 (0) | 2016.01.27 |
---|---|
LOB_11.skeleton->golem (0) | 2016.01.27 |
LOB_9.troll->vampire (0) | 2016.01.22 |
LOB_8.orge->troll (0) | 2016.01.22 |
LOB_7.darkelf->orge (0) | 2016.01.21 |