level 8
2020. 9. 6. 01:53
이번에는 argv[1]까지 못쓰네요.
argv[0]을 이용해 풀어야겠습니다.
이 문제는 두 가지 방법이 저는 떠올랐습니다.
하나는 심볼릭 링크를 통해 파일 이름에 쉘코드를 삽입시키는 것.
다른 하나는 execl 함수를 사용해 argv[0] 인자에 파일이름이 아닌 쉘코드를 삽입시키는 것.
"""
심볼릭 링크를 이용하기 위해서는 쉘코드에 '\x2f'가 존재해서는 안되는데, 아직까지 깊게 생각하지 않아서인지 그 방법이 도무지 떠오르지 않는다.
또한 왜 하드 링크는 안되는지에 대한 궁금증이 생겼지만 이 역시 해결하려 노력하지 않아서인지 떠오르지 않는다.
이 두 가지 의문에 대해 답이 나온다면 추후에 수정하도록 하겠다.
"""
execl 함수가 있는 소스코드를 먼저 작성해보겠습니다.
저는 이렇게 작성했습니다.
NOP 바이트를 많이 주면 그 만큼 문제도 관대해지거든요 ㅎㅎ
execl 함수는 함수 자체에서 파일을 실행시키기 때문에 argv[0]에 파일 이름이 들어가지 않습니다.
ShellCode가 들어가죠 ㅎㅎ
그래서 이제 argv[0]의 주소를 알아낼 것입니다.
복사하고
이 부분을 이렇게 수정합니다.
컴파일하고,
0xbffffbad가 argv[0]의 주소라네요!
payload를 작성하겠습니다.
./test ./troll `python -c 'print "A"*40 + "B"*4 + "\xad\xfd\xff\xbf"'`
흠 뭔가 원본 프로그램하고는 약간의 차이가 있는 듯 해보입니다.
이러려고 NOP 바이트를 껴놨죠!
성공!