본문 바로가기
  • True knowledge exists in knowing that you know nothing. -Socrates-
Study/lob

LOB level1 (gate->gremlin)

by intadd 2016. 7. 13.



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

댓글