|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=30731 [복사]
CentOS 6.3 버전으로 공부하고 있습니다.
커널은 uname 결과 2.6.32-279 같네요
#include <stdio.h>
int main()
{
int access=0;
char pass[40];
printf("input password : ");
scanf("%s", pass);
if(pass == "totoro"); // 어차피 bof 니까 아무래도 상관 없으니까
{
access ++;
}
if(access==1);
{
printf("Access!!!\n");
}
else
{
printf("Fail!!!\n");
}
return 0;
}
이게 코드고요.
리버싱 내용은 간략히 설명해드리자면
0x08048472 에서 scanf를 콜해갑니다.
s를 누르긴 했는데 n하고 s 하고 차이가 없네용 ;;
여기서 1111111111로 스택을 채워보면
esp 는 0xbffff2a0 이고 ebp 는 0xbffff2e8 입니다.
4 * 13 Byte 차이 인거죠.
그래서 다음에 재 disassemble 을 합니다.
제가 가고싶은 리턴주소는 printf("Access!!!\n"); 로 가고 싶단 말입니다.
cmp jne 바로다음의 주소는 0x0804847f 에 있고 여기부분이 Access!!를 출력하는 부분이 맞습니다.
scanf에서 스택에 1111111111111111111111 로 ebp까지 채우고
그 다음 4바이트에
\x7f\x84\x04\x08 이라고 넣었는데 틀렷나요?
도저히 안되네요.
버퍼오버플로우는 쥐똥도 모르는 놈이군!
하지 마시고
커널의 방어기법때문인지 제 잘못인지 알려주세요 ㅠㅠ
방어가 제가 공부하기에 너무 쎄서 그런지도 모르겠네요.
근데 CANARY 값도 변경되었을 텐데 프로그램이 안튕기네요 ;; |
Hit : 9753 Date : 2013/04/09 12:01
|