orge.c 의 코드이다. here is changed!라고 친절히 알려주는데 이번에는
strlen(argv[0]) != 77 인 경우 exit(0);하게 되었다.
argv[0]은 파일명이다.
리눅스 터미널에선 실행파일을
./[파일명] 'argv[1]' 'argv[2]' ....
처럼 실행하는데 여기서 파일명이 argv[0]에 해당한다. 파일명을 바꾸는 가장 쉬운 방법은 당연히 mv [기존파일명] [바꿀파일명]이겠지만, 그 외에도 다른 방법이 있다.
바로 심볼릭 링크이다. 윈도우에서 사용하는 바로가기랑 비슷하다 보면된다.
사용법은
ln -s [대상 경로] [링크 경로]
이다.
즉
를 사용하면 기존 파일을 건드리지 않고 파일명을 바꿀 수 있다.
기존 코드와 다 똑같고 argv[0]만 바뀌었기 때문에 전에 사용한 코드를 비슷하게 사용하였다.
(gdb core을 뜨기 위해서 temp로 orge를 복사해서 사용하였다.)
세그멘테이션 폴트가 뜨고 코어가 떨어졌다.
gdb -c core로 코어를 열어 x/32x $esp로 스택을 보았다.
0xbffffb80 언저리부터 90이 시작하는 것을 볼 수 있다. 안전하게 0xbffffb90을 ret에 덮어쓰기로 하였다.
운이 좋았나보다. 한번에 쉘을 얻은 것을 확인할 수 있다.
'LOB' 카테고리의 다른 글
LOB : Troll→Vampire (0) | 2018.04.09 |
---|---|
LOB : Orge→Troll (0) | 2018.04.09 |
LOB : Wolfman → Darkelf (0) | 2018.04.08 |
LOB : Orc → Wolfman (0) | 2018.04.08 |
LOB : Goblin → Orc (0) | 2018.04.08 |