|  |
| |
별빛을담아 |
저게 별거 아닌거 같지만 사실 push라는 명령어가 들어갈 공간이
차지 하고 안하고라는 차이가 있죠.
만약 모든 명령어가 1바이트라면... 위에 쓴 명령어는 총 10바이트겠군요
근데 여기에서 맨 위에 있는
push $0x0 \n\t
push %ebx \n\t
두개의 코드를 빼버리면 명령어만 총 8바이트가 되는거죠.
push명령어가 몇바이트 명령어이고 mov가 몇 바이트명령어인지 모르겠지만..
ftz에서 gdb로 disass를 해 보셨다면 push로 0을 넣는 명령어가 메모리 주소에 +1시킨다는 것을 볼 수 있습니다.
|
2011/05/29 |
|
| intmain1202 |
별빛님 말씀대로라면... 꼭 10바이트가 되어야된다는 건가요?
그러진 않을것같은데.....
메모리에 /bin/sh를 푸쉬햇을때 esp는 어짜피 그아래서 /bin/sh를 주소를 가르킬테고..
그럼 바로 mov %esp, %ebx
push 0x0 push %ebx안해도 될것같은데..
왜 저런 과정을 거치는건지 모르겟네요;; |
2011/05/29 |
|
| profreez |
int execve(const char *filename, char *const argv[], char *const envp[]);
execve("/bin//sh", ["/bin/sh", NULL], [NULL])
위 함수 인자를 보시면 됩니다.
argv 부분에 "/bin/sh"를 가르치는 포인터와 끝을 나타내는 NULL(0)이 필요합니다.
그래서 0을 넣었군요. |
2011/05/29 |
|
| profreez |
해킹 공격의 예술 이라는 책 셸코드 부분을 참고 하시면 될듯 싶습니다.
개정판 기준으로 425페이지 참고 하세요.
개인적으로 저책 개정판의 장점은 자세한 설명과 라이브 시디가 좋고
1판은 책이 ㅇㅏㄼ아서 좋더군요. 개정판은 가지고 다니기엔 너무 두꺼워요ㅡ.ㅜ
1판도 하나 사둬야겠네요 ㅎ |
2011/05/29 |
|