쉘은 딴거같은데 결과가 안나오는 것 같아요
쉘 딴거같은데 아무것도 안뜨는데 잘못한 걸까요??
코드입니다
#pwnable
작성자 정보
답변
1
2dedce
워게임 고인물
$
기호는 쉘을 딴 게 아니고 p.interactive()
를 실행하면 쉘을 따든 안 따는 나오는 것입니다.
보면 [*] Got EOF while reading in interactive
가 있는데 이것은 통신이 끊겼다는 얘기입니다.
통신이 끊길만한 이유는 서버측(remote) 프로그램이 정상 종료되거나, 아니면 에러로 종료되는 경우입니다. 모두 쉘을 따는 데 실패한 것입니다.
그러므로 페이로드가 잘못된 것이므로 고쳐야합니다
체크리스트
- 스택에 위치한 buf의 주소는 주소영역랜덤화보호기법(Address Space Layout Randomization, ASLR)에 의해 실행할 때마다 달라지고 있습니다. 따라서 이에 맞춰서 payload를 구성해야합니다. 프로그램을 실행시키면 buf의 주소를 처음에 알려주고 있으므로 이것을 활용해야 할 것입니다.
- payload는
scanf("%s")
에 의해 입력 받고 있습니다.scanf
가 입력 받을 때는 공백(' '
, 0x20), 개행('\n'
, 0x0a), 탭(\t
, 0x09) 등의 구분 문자가 있으면 거기까지만 받아들이고 그 이후로는 입력 버퍼에 남겨놓습니다. 따라서 payload에 이러한 문자가 없도록 구성해야 합니다. (예를 들어scanf("%s%s", &buf1, &buf2);
가 있으면 입력으로ABC 123
을 주었을 때 buf1, buf2에 각각ABC
,123
이 들어갑니다. 하지만scanf("%s", &buf);
에서ABC 123
을 입력하면 buf에ABC
가 들어가고123
은 입력 버퍼에 남게 됩니다.)