vi orge.c
우선 argv[0]의 길이가 77이 아니면 “argv[0] error\n”를 출력하고 종료시키는 코드 추가된 것을 제외하고는 앞의 문제와 똑같은 코드이다.
+) argc : 프로그램 실행 시 지정해준 ‘명령형 옵션의 개수’가 저장되는 곳
argc는 항상 1 (옵션 하나도 입력하지 않으면!)
argv : 프로그램 실행 시 지정해준 ‘명령형 옵션의 문자열들’이 실제로 저장되는 곳
argv[0]은 프로그램 자신의 파일명
argv[0]이 프로그램 자신의 파일명이라 하는 것은 ‘./파일명’자체를 말하는 것이므로 .과 /도 argv[0]의 길이에 포함된다고 한다.
하지만 ‘./darkelf’의 길이는 9밖에 되지 않으므로 심볼릭 링크를 이용해야한다.
+) 심볼릭 링크?
어떤 데이터를 품고 있는 파일 이름에 다른 이름으로 링크를 거는 것으로 음 쉽게 이해하자면 약간 하이퍼링크?같은 거 같다.
심볼릭 링크를 거는 방법은 ‘ln –s [링크걸 파일이름] [링크]’
링크가 제대로 걸렸는지 확인해보자.
‘stack is still your friend.’가 뜨므로 argv[0]에는 값이 제대로 걸렸다.
이제 앞의 문제와 같은 방법으로 풀어나가면 될 거 같다.
gdb `python –c ‘print“./”+“A”*75`를 하고 strcpy함수 실행 전까지 브레이크포인트를 걸고 r `python –c ’print“\xbf”*48’` `python –c ‘print“A”*100’`을 실행하면!
./A*57링크는 orge 파일명에 걸린 링크이므로 orge의 권한에서 막히게 된다. 그래서 복사본을 만들고 그 복사본 파일명에 또 심볼릭 링크를 걸어 문제를 풀자.
gdb `python –c ‘print“./”+“B”*75’`실행 후 r `python –c ’print“\xbf”*48’` `python –c ‘print“A”*100’`실행
될 거라고 생각 했는데 안된다.
그런데 자세히 보니
Starting program: /home/darkelf/./B*75 `python –c ‘print“\xbf”*48’` `python –c ‘print“A”*100’`이라고 적혀있다.
그럼 argv[0]에 /home/darkelf/도 포함된다. →14
정상적으로 실행이 되었다.
argv[2] 주소 = 0xbffffbed
찾은 주소로 계속 시도하였으나 세그멘테이션 폴트가 자꾸 떠서 계속 주소를 다시 찾고 다시 찾은 주소로 했으나 계속 세그멘테이션 폴트가 떠서 그냥 때려 맞췄더니 먹혔다.
'LOB' 카테고리의 다른 글
LOB 9번(troll → vampire) (0) | 2016.10.04 |
---|---|
LOB 8번(orege → troll) (0) | 2016.10.04 |
LOB 6번 (wolfman → darkelf) (0) | 2016.10.04 |
LOB 5번 (orc → wolfman) (0) | 2016.07.13 |
LOB 4번 (goblin → orc) (0) | 2016.07.13 |