일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- edge trigger
- Compiler
- LOB
- wrefresh
- REDIS
- 취약점
- BOF
- ncurses
- 풀이
- wnourefresh
- architecture
- level trigger
- iptables
- vtable
- epoll
- packet flow
- NAPT
- C언어
- epoll_wait
- rfc5508
- doupdate
- DOCKER-USER
- mvwin
- packet filter
- .net core 7
- 어셈블리어
- cbpf
- .nret core 배포
- Docker
- ioctl
- Today
- Total
목록L.O.B (3)
Tuuna Computer Science
zombie_assassin으로 가기 위한 관문을 가기 위해서는 아래문제의 코드의 취약점을 바탕으로 해결해야 한다. 코드를 보자. 리턴주소에 라이브러리함수, 환경변수도 등등 사용할 수 없다. 그리고 HINT를 보면 Fake EBP를 사용하라고 나와있다. Fake EBP에 대해 알아보자. Fake EBP란 EBP의 값을 이동시켜 return주소를 조작하는 것이다. 근데 한번의 leave 명령으로는 조작된 EBP를 바탕으로 ESP를 조작할 순 없다. 그래서 우린 return주소에 leave명령을 한번 더 쓸 수 있게 leave-ret 명령의 주소를 가지고 와야한다. 그리고 문제의 소스의 마지막에 printf의 인자로 buffer의 주소를 스택에 넣고 있다. 이는 선언된 버퍼 바로 위에 만들어진 것으로 이것도..
이번에는 bugbear에서 giant로 가는 문제를 풀어볼 생각이다. 일단 문제의 소스를 보자 좀 기네요;; 일단 이를 차분히 분석해보면 이 소스코드에선 libc의 주소값을 구해서 buffer에 저장한뒤 lib_addr이라는 변수에 저장합니다. 여기서 ldd assassin | grep libc란 assassin이라는 프로그램의 의존성이 있는 라이브러리중 libc를 찾는다는 뜻입니다. 근데 우린 assassin을 접근할 수 없죠? 그럼 터미널에서 assassin대신 giant로 해봐여^^ 같은 시스템이니 같은 주소로 찍히겠져 자 libc의 주소는 0x40018000입니다. 이제 다음 코드를 봅시다. nm 명령어는 어떠한 것의 심볼을 알아볼 때 사용하는 것입니다. 이 코드는 libc.so.6에서 __exe..
LOB문제를 풀어보다가 재미난 사실을 알아서 풀이과정을 서술하려함. 일단 문제의 소스코드를 보면 FPO를 사용하라고 나와있다. FPO는 Frame Pointer Overflow로 SFP 즉, 복구 EBP의 값을 조작해서 해결하려는 것이다. 문제의 소스를 더 자세히 보자. argv[1]을 problem_child함수의 인자로 보내고 problem_child의 함수에서 buffer배열 40바이트 선언, strncpy함수로 매개변수를 buffer로 41바이트 복사하고 있다. 여기서 유의할 점은 버퍼의 크기는 40바이트인데 41바이트를 넘기고 있다는 것이다. 즉, 이는 복구 EBP의 값을 오버플로우하여 값을 조작할 수 있음을 읨한다. 일단 FPO를 이해하기 위한 스택구조를 살펴보자. 일단 아래의 그림은 "\x9..