6번 문제에서 한가지가 더 추가되었습니다.
argv[0]의 길이가 77이 아니면 에러 메시지를 출력하고 종료합니다.
링크를 걸어서 풀면 됩니다.
링크의 개념을 모르시면 다음 글을 읽고 오세요.
-> http://slimv.tistory.com/entry/SymbolicHard-link
argv[0]의 길이를 77로 맞추고
argv[1]의 48번째 값을 0xbf로 맞춰주고
argv[2]에다 shell code를 넣어주면 됩니다.
Stack 구조
Low addr
buffer (40-byte) |
sfp (4-byte) |
ret (\x00\x00\x00\xbf)
|
shell
|
High addr
프로그램을 분석하기 위해 임시로 컴파일한 파일에 링크를 걸고 gdb로 열어봅니다.
링크 파일의 이름은 현재 위치를 포함하고 77자리여야 합니다.
argv[2]는 argv[1] 바로 뒤에 있기 때문에 argv[1]에 접근하는 strcpy에 Break point를 걸고 stack을 봅니다.
main+270에 Break point를 걸고 stack을 확인해 보겠습니다.
실행할 때 ret 주소값이 0xbf로 시작하게 맞춰줘야 합니다.
shell code가 들어갈 주소는 0xbffffba8 입니다.
이제 공격을 하기위해 orge에 링크를 건 파일을 생성합니다.
argv[0]이 ./를 포함해 77자리가 되도록 만들어야 합니다.
nop slide를 채우고 뒤에 shell code를 입력하고 slide 중간에 return 해줍니다.
공격에 성공했습니다.