recv 관련해서 궁금한것이 있습니다.

해당 문제의 소스코드입니다
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' 가 출력이 안되는건지 궁금합니다

#pwnable
작성자 정보
답변 1
avatar
Dreamhack
대표 업적 없음

안녕하세요,
system(" echo 'system@plt"); 는 셸에서 실행하면
sh: 1: Syntax error: Unterminated quoted string 라는 에러를 뱉는 것이 의도된 동작입니다.
이 문구는 stderr이기 때문에 서버에 연결했을 경우에는 보이지 않는 것이 정상입니다.

Dendrog 님의 로컬 환경에서는 저러한 에러가 출력되지 않았다면 기본 셸 환경을 다른것을 쓰고 계실수도 있겠습니다.

감사합니다.

2022.05.20. 16:04
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기