bof.c
func 디버깅(굳이 안해도 된다)
func의 인자 0xdeadbeef를 0xcafebabe로 교체하면 끝
솔직히 대충 때려치기 하면 된다.
틀렸을 때
맞았을 때
하지만 쉘이 바로 끝난다. 어떤 명령어도 입력할 수 없다.
여기서 cat을 써줘야 한다.
왜?
cat은 입력받은 문장을 다시 출력해 주는 명령어다.
python 부분으로 앞의 출력이 끝나고 cat으로 stdout파이핑 하도록 해야하기 때문
만약 cat 해주지 않으면 stdin이 close되기 때문에 쉘이 종료되서 flag파일을 열어볼 수 없다.
쉽게 말해,
쉘을 열고 cat 실행 -> 원하는 명령 입력(ex. cat flag) -> 출력이 되기 때문에 파이프라인 넘겨서 전달됨
-> cat flag가 처음엔 cat으로 입력됐다가 cat의 출력으로 파이프라인 넘겨져서 실행됨
올바른 답
둘 중 하나 쓰면 된다.
참고
1. ;과 &&차이 - 앞 명령어의 성공 여부
; : 앞 명령어의 성공 여부와 상관없이 다음 명령어 실행
&& : 앞 명령어가 성공한 경우 다음 명령어 실행
-> 위의 경우 앞 명령어가 성공했기 때문에 ;, && 둘 다 상관 없다.
2. 파이프, 파이프라인
둘 이상의 명령을 함께 묶어 출력의 결과를 다른 프로그램의 입력으로 전환 가능
(= 명령의 표준 출력을 또 다른 명령어의 표준 입력과 연결 시킬 수 있음)