해당 문제의 소스코드입니다
setvbuf(stdin, 0, _IONBF, 0);
setvbuf(stdout, 0, _IONBF, 0);
system("echo 'system@plt");
// Leak canary
printf("[1] Leak Canary\n");
printf("Buf: ");
read(0, buf, 0x100);
printf("Buf: %s\n", buf);
이 소스코드를 보면 read하기전에 system함수로 echo로 출력 한번 print로 출력 두번이 있는데
로컬에서 실행할때는 익스플로잇 코드에
print(p.recvline())
print(p.recvline())
print(p.recv(10))
을 처음에 해주니
b'system@plt\n'
b'[1] Leak Canary\n'
b'Buf: '
이렇게 출력이 되는데
서버로 공격을 수행하니
b'[1] Leak Canary' 이것만 출력되고 멈추길래 p.recv(1024)하나만 출력시켜보니
b'[1] Leak Canary\nBuf: ' 이렇게 출력되더라고요
분명 로컬로 실행시킬땐 b'system@plt\n' 이게 출력됐었는데 서버로 수행할때는 왜 b'system@plt\n' 가 출력이 안되는건지 궁금합니다
안녕하세요,
system(" echo 'system@plt");
는 셸에서 실행하면
sh: 1: Syntax error: Unterminated quoted string
라는 에러를 뱉는 것이 의도된 동작입니다.
이 문구는 stderr이기 때문에 서버에 연결했을 경우에는 보이지 않는 것이 정상입니다.
Dendrog 님의 로컬 환경에서는 저러한 에러가 출력되지 않았다면 기본 셸 환경을 다른것을 쓰고 계실수도 있겠습니다.
감사합니다.