본문 바로가기

LOB

LOB 7번(darkelf → orge)

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