[시작 이전에 이 문제를 푸는데는 2틀 정도를 사용했습니다. 제대로 정리는 아래에다 해놨으니 위에를 좀 읽어보시되 문제 풀이는 아래를 참고하시면 좋겠습니다]

새롭게 one more! 이라는 주석과 함께
memset (argv[1], 0, strlen(argv[1])); 이 추가됐습니다 

memset 이란? 다시 한번! memset(a,b,c) = a = 채울 메모리의 주소 b =채울 문자 c = 채우려고 하는 문자의 개수입니다! 
argv1에 0을 argv1 개수 만큼 채워버리네요 ? 으으으으으음.....
이번에는 argv[1]에 뭔갈 채워넣어도 0으로 다 대체를 해버리는군요 
\xbf를 어떻게 넣어야 할지 곰곰히 생각을 해봐야겠습니다 

argv[0]을 이용해야하는데 argv[0]은 파일명입니다 . 이 파일명을 이제 바꿔줘야하는데 사용되는 방법이 바로 심볼릭 링크입니다 . 
(아무리 해도 방법을 모르겠어서 지인에게 물어본 후 진행했습니다)

컴퓨팅에서 심볼릭 링크(symbolic link) 또는 기호화된 링크는 절대 경로 또는 상대 경로의 형태로 된 다른 파일이나 디렉터리에 대한 참조를 포함하고 있는 특별한 종류의 파일이다. -출처 위키 

ln - s 명령어로 심볼릭링크 파일을 만들 수 있으나 
단 \x2f가 있으면 만들 수 없으므로 \x2f가 없는 쉘코드를 사용해야합니다!
그래서 저는 48byte 쉘코드를 이용하기로 했습니다 

"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'`

토나오게 저한텐 어려운 문제입니다 이틀 가까이 해매고있습니다 

심볼릭 링크가 글자가 깨져서 너무나도 해맸습니다 정말 진짜 생각할수록 성질나네요 

그래서 이렇게 AABB라는 값을 넣어줬습니다 . 
그 뒤에 자동 완성 기능을 이용해서 gdb를 실행시키는데 성공했습니다
농담안하고 너무 좋아서 숨을 헐떡였습니다 .

esp값이 strcpy인자로 들어가기 때문에 strcpy에 브레이크 포인트를 줬습니다


혹시나 이렇게 argv[1] [2] 를 불러서 풀 수 있을까 하고 알면서도 시도를 해봤지만 역시 argc must be two! 라는 문구가 뜨면서 짤리네요 


47 =! \xbf 를 만족시키지 못했더니 stack is stiil your friend. 라는 오류문구가 나오는군요 그럼 더 추가시켜보겠습니다.

argv[1]에만 값을 넣으니 정상적으로 실행이 되는군요



제가 넣은 쉘코드가 맞나? 의심되지만 그나마 의심가는거라도 노려서 공격코드를 작성해보겠습니다.


이런식으로 하니 또 오류가 발생하는군요 심볼릭 링크 화납니다 .

계속 시도하였으나 실패하여서 코어덤프 이용하기전에 다시 한번 분석해보기로 하였습니다.


이번엔 이 주소를 노려보겠습니다 .

----------------------------------------------------------------------------------------------------정리해서 다시 시작하겠습니다

bash2를 안한 상태에서 심볼릭 링크한 파일을 gdb로 열었습니다.
쉘코드가 중간에 깨져있는걸 보아하니 심볼릭 링크할때 제대로 되지 않았나 보군요.


ps명령어도 bash 상태인것을 확인해봤습니다.


심볼릭 링크를 지워버린후에 bash2를 해서 새롭게 심볼릭 링크를 만든 후에 gdb로 다시 한번 분석을 해보겠습니다.


쉘코드가 잘 출력되는것을 확인 할 수 있습니다 .


놉의 중간 주소를 생각해서 공격을햇으나 세그맨테이션 에러가 뜨는군요


코어덤프를 생성하기 위해서 ulimit -c unlimited를 해준 이후에
tmp에는 이미 고블린의 core파일이 있기때문에 폴더를 하나 더 만든후에 
그 곳에 troll파일을 복사하고 다시 생성하였습니다
[심볼릭링크 파일이여서 코어덤프가 생성이 안되는줄 알았더니 이미 코어파일이 존재하는 상태이고 그 코어파일은 고블린의 권한을 가지고 있기 때문에 생성이 안되던거였습니다. 그래서 새로운 폴더를 생성하여 코어파일이 생성되도록 하였습니다]


그 후에 다시 심볼릭링크 파일을 만든 후에 아까 공격했던 코드를 그대로 다시 써넣은후 세그먼테이션에러가 떠서 생성된 코어덤프를 확인함으로써 
어디가 문제였나 분석해보겠습니다


0xbfffff60 in ?? 라는 문구가 발생하는군요 0xbfffff60으로 찾아 들어가봅시다


확인해보니 \AA를 실행하다가 멈춰버렸습니다. 
왜 \AA인지 확인을 해보겠습니다


./AA인걸 확인할 수 있습니다


좀 더 자세히보면 이렇게 주소가 이뤄져있는걸 보실 수 있습니다.    


놉의 위치를 찾았습니다

[스택 끝 주소는 메모리의 끝주소기 때문에 사용하면 안됩니다.]


쉘의 주소가 확인이 됩니다 스택 끝 주소는 피하고 그 뒤 값인 80쯤을 넣어주면 놉코드를 타고들어가서 성공할거같습니다 .


성공적으로 트롤의 권한을 휙득했습니다 이틀이나 걸린 무시무시한 녀석이였습니다.

'해커스쿨 lob' 카테고리의 다른 글

LOB skeleton  (0) 2016.05.05
LOB vampire  (0) 2016.05.04
LOB orge  (0) 2016.05.02
LOB darkelf  (0) 2016.05.02
LOB wolfman  (0) 2016.05.02

+ Recent posts