LOB level 1
LOB (gate -> gremlin)
1. 첫 번째로 cat 명령어를 사용하여 gremlin파일의 코드를 확인합니다.
2. 코드 분석
1. char형 buffer[256]을 생성
2. 전달 받는 인자의 수가 2개 미만이면 프로그램 종료
3.strcpy argv[1]을 buffer에 복사한다.
여기서 argv[0]은 프로그램을 실행시키는 명령어 입니다. 예를 들어 ./gremlin
gdb 를 사용하여 인자값들의 주솟값을 확인하기 위해 cp 명령어를 사용해
tmp로 복사시켜줍니다.( gdb 권한 문제)
gdb를 이용해 스텍의 크기는 0x100=256byte라는 것을 알 수 있습니다.
b * 는 breakpoint를 말합니다.
disas main에서 프로그램을 멈출 지점을 정해주는 것 입니다.
(break point는 strcpy함수가 끝난 후의 지점에 설정해 주어야 합니다.)
r(run) 은 프로그램을 실행시키는 명령어 입니다.
r 뒤에 나오는 것은 인자값을 전달해주는 것 입니다.
breakpoint가 걸린 상태에서 x/1000x $esp 명령어를 사용하여 스텍에 쌓여있는 것들 을 확인합니다.
저는 r 명령어를 사용 할 때 argv[1]에는 A를 argv[2]에는
B를 넣어주었습니다.
여기서 B[16진수로 42]가 시작 되는 주소를 확인해 줍니다.
오차가 있을 수 있기 때문에 넉넉히 몇칸 뒤의 주소로 결정합니다.
ftz에서는 환경변수를 사용하여 리턴어드레스에
환경변수 주솟값을 입력했지만,
여기에서는 다른 방법으로 argv[2]에 쉘코드를
입력하고 argv의[2] 주소를 찾아 리턴어드레스에 넣어주는 방법입니다.
'Study > lob' 카테고리의 다른 글
LOB level6 (wolfman->darkelf) (0) | 2016.09.13 |
---|---|
LOB level5(orc->wolfman) (0) | 2016.09.13 |
LOB level 4 (goblin -> orc) (1) | 2016.08.01 |
LOB level 3 (cobolt -> goblin) (0) | 2016.08.01 |
LOB level 2 (gremlin -> cobolt) (0) | 2016.08.01 |
댓글