Troll의 소스를 확인하도록 하겠습니다.



첫번째로 보이는 차이점은 11번째부터 15번째라인까지의 내용이 변경 되었네요.

입력 할 수 있는 argument의 갯수가 제한이 없던 것에서 1개로 바뀌었습니다.

대신 argv[0]의 길이 제한은 사라졌네요.

여전히 버퍼나, 환경변수나, argv[1]0으로 초기화 하는 것으로 보아서 링크 파일을 이용해서 argv[0]에 쉘코드를 입력해야 할 것 같습니다.

 

그럼 파일의 이름을 쉘코드로 하는 링크파일을 생성해 주겠습니다.

어라.. 파일이 생성이 안되네요그 이유는 바로 쉘코드에 포함되어 있는 \x2f때문입니다. \x2f“/”인데요. 따라서 경로가 한번 나눠지게 되고 정상적으로 링크가 생성되지 않는 것입니다.

이번 문제의 핵심은 이 \x2f를 포함하고 있지 않은 쉘코드를 이용하는 것입니다.

 

이러한 쉘코드를 흔히 다형성 쉘코드라고 부릅니다.

다형성 쉘코드란 쉘코드를 암호화하고, 사용하기 전에 복호화를 원본 쉘코드를 다시 구하여 동작하는 쉘코드를 말합니다.

더미다같은 패킹과 비슷한 개념이라 생각하면 될것 같습니다.

 

제가 사용한 다형성 쉘코드는 다음과 같습니다.

"\xd9\xc5\xd9\x74\x24\xf4\xb8\x15\xc3\x69\xd7\x5d\x29\xc9\xb1\x0b\x31\x45\x1a\x03\x45\x1a\x83\xc5\x04\xe2\xe0\xa9\x62\x8f\x93\x7c\x13\x47\x8e\xe3\x52\x70\xb8\xcc\x17\x17\x38\x7b\xf7\x85\x51\x15\x8e\xa9\xf3\x01\x98\x2d\xf3\xd1\xb6\x4f\x9a\xbf\xe7\xfc\x34\x40\xaf\x51\x4d\xa1\x82\xd6"

 

우선 NOP슬라이드를 포함한 쉘코드를 이름으로 하는 링크를 생성하도록 하겠습니다.

NOP슬라이드는 많아서 나쁠거 없으니 한 100개쯤

 

그리고 적당히 ret값을 넣어 오류를 유도하도록 하겠습니다.


 

에러가 났으니 보다 구체적으로 쉘코드의 위치를 얻기 위해 core dump 디버깅을 하도록 하겠습니다.


NOP슬라이드가 보이네요. 얼추 0xbfffff50쯤을 ret 주소로 하면 될듯 합니다.


빙고~! 쉘이 떳네요.

 

이제 원본 파일을 대상으로 공격하도록 하겠습니다.

정상적으로 troll의 쉘을 획득하였습니다.

패스워드는 aspirin이네요..

이 문제 풀려고 3일동안 삽질했더니 아스피린이 간절하긴 합니다

뭔가 센스있는 패스워드이네요 ㅎ

+ Recent posts