예전에 써왔던 쉘코드들은 그 때 그 때 새로 만들어주어야만 하는 쉘코드를 썼습니다.
예를 들어서 id가 2008인 사용자가 setuid걸린 프로그램을 하나 만들었을 때
그 프로그램을 통해 쉘코드에는 setreuid(2008,2008) 이런식으로 만들어주어야 했습니다.
하지만 이번에는 setreuid 함수 인자로 상수값대신 geteuid 함수를 사용함으로써
setuid를 건 사용자의 id값을 그때그때 리턴하도록 하는 쉘코드를 만들어보겠습니다.
먼저 C코드로 짜보았습니다.
달라진 거라곤 setreuid 함수의 인자만 달라졌을 뿐입니다. 이제 저 코드를 가지고 쉘코드를 만들면 됩니다.
쉘코드 만드는 방법에 대해서는 두번이나 포스팅을 했기 때문에 자세한 과정은 생략하겠습니다.
gdb로 열어서 어떻게 구성을 해야할지 정보를 모아보았습니다.
이제 위 정보를 토대로 어셈코드로 만들어보겠습니다.
0x00을 아직 신경쓰지 않고 작성한 어셈코드 입니다.
objdump로 봐보게 되면 아주 많은 0x00값이 있는 것을 보실 수 있습니다.
이제 0x00을 없앤 어셈 코드를 보시겠습니다.
0x00을 전부 없앴습니다. 이제 위 코드를 쉘코드 형태로 쭉 써보겠습니다.
\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68
\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80
위와 같은 형태의 값이 나옵니다. 총 41Byte입니다. 크기는 별 신경 안쓴거같아 큰거 같군요.\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80
잘 실행 되는지 보겠습니다.
간결하게 테스트하는 코드를 짜주시고..
테스트를 해보니 잘 되는군요.
여기서 끝내면 뭐하니.. 역시나 해커스쿨 level19번을 이 쉘코드를 가지고 풀어보겠습니다.
그냥 에그쉘 사용해서 해버리겠습니다. 목적은 쉘코드의 기능이 제대로 작동하는지 보기 위함이니까요.
잘 작동하고 있습니다.
앞으로 이 쉘코드를 사용해보도록 해야겠군요..
'My Study > Exploit' 카테고리의 다른 글
간단한 정수 오버플로우 (2) | 2012.04.22 |
---|---|
Windows ShellCode 만들기 ( DEP란.. ) (5) | 2010.10.30 |
버퍼 오버플로우 취약점에 대한 대처 방안들 (0) | 2010.04.29 |
Hackerschool level19 쉘코드 줄이기, 환경변수 사용하지 않기 (0) | 2010.04.26 |
RTL로 푼 해커스쿨 level11 (4) | 2010.04.07 |