LOB-level7
#include <stdio.h>
#include <stdlib.h>
extern char **environ;
main(int argc, char *argv[])
{
char buffer[40];
int i;
if(argc < 2){
printf("argv error\n");
exit(0);
}
// here is changed!
if(strlen(argv[0]) != 77){
printf("argv[0] error\n");
exit(0);
}
// egghunter
for(i=0; environ[i]; i++)
memset(environ[i], 0, strlen(environ[i]));
if(argv[1][47] != '\xbf')
{
printf("stack is still your friend.\n");
exit(0);
}
// check the length of argument
if(strlen(argv[1]) > 48){
printf("argument is too long!\n");
exit(0);
}
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
// buffer hunter
memset(buffer, 0, 40);
}
저 빨간 글씨의 함수가 추가되었습니다.
이는 argv[0]은 실행하는 파일의 글자수라고 알고있어서 77개의 a로 이루어진 파일로 익스플로잇을 짜서 공격실행했는데 안되서 고민하다가
./실행파일 에서 ./도 포함된다는 것을 알아서 75로 공격했더니 성공했습니다.
그외 달라진 것은 없었습니다.
0 개의 댓글