- 코드 분석
int main(int argc, char *argv[])
{
char buffer[256]; //크기가 256인 char형 배열 buffer 선언
if(argc < 2){ //프로그램에 전달된 인자의 개수가 2이상이라면
printf("argv error\n"); //에러를 출력하고 프로그램 종료
exit(0);
}
strcpy(buffer, argv[1]); //프로그램에 전달된 첫 번째 인자를 buffer에 복사
printf("%s\n", buffer); //버퍼 출력
}
요약 : "실행 시 전달된 인자를 출력하는 프로그램"
취약점 : "strcpy 함수에서 인자로 전달된 문자열을 길이제한을 걸지 않고 메모리에 모두 복사해버리기 때문에 다른 메모리 영역을 침범할 수 있다"
- 페이로드를 짜기 전 사전 작업
1. 권한 에러 방지를 위해 cp 명령어로 프로그램을 복사한 후 gdb로 분석
2. 배열에 dummy값이 생성되지 않았음을 확인 가능
0x804845f <main+47>: lea %eax,[%ebp-256]
0x8048465 <main+53>: push %eax
0x8048466 <main+54>: call 0x8048370 <strcpy>
3. gdb의 b 명령어로 프로그램 맨 마지막 (*main+79)에 브레이크 포인트를 걸고, r 명령어로 프로그램 실행한 후, x 명령어로 esp 부근을 확인해 입력한 값이 어디부터 채워져 있는지 확인
*사람마다 다르게 나올 수 있음
(gdb) b *main+79
Note: breakpoint 1 also set at pc 0x804847f.
Breakpoint 2 at 0x804847f
(gdb) r `python -c 'print "A"*90'`
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/gate/gremlin1 `python -c 'print "A"*90'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Breakpoint 1, 0x804847f in main ()
(gdb) x/30x $esp
0xbffffb80: 0x080484ec 0xbffffb88 0x41414141 0x41414141
0xbffffb90: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffffba0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffffbb0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffffbc0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffffbd0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffffbe0: 0x4000*4141 0x400143e0 0xbffffc6c 0x400261a6
0xbffffbf0: 0x4001ead0 0x400143e0
* 리틀 엔디언 구조이므로 값이 뒤에서부터 한 바이트씩 채워짐
- 위의 경우 0xbffffb88이 buffer의 시작점이라는 것을 알 수 있음
- 페이로드 짜기
1. 충분한 양의 NOPSLED 넣기
2. 쉘코드 넣기
3. '256-NOPSLED길이-쉘코드의 길이+4(SFP)'만큼 NOPSLED 추가하기
4. buffer의 시작 주소 넣기
'system hacking' 카테고리의 다른 글
Layer7 포너블 2차시 과제 - overwrite_variable32 풀이 (1) | 2022.09.20 |
---|---|
Layer7 리버싱 1차시 과제 - dreamhack.io basic_exploitation_001 (0) | 2022.09.19 |
Layer7 포너블 1차시 과제 - pwnable.kr bof 문제 풀이 (0) | 2022.09.19 |
Layer7 포너블 1차시 과제 - bof_basic_64 (0) | 2022.09.14 |
Layer7 포너블 1차시 문제 풀이 - bof_basic (0) | 2022.09.14 |