#를 왜 붙여야 할까요?

강의에서 host = ‘8.8.8.8"; ls #'일 경우, cmd = 'ping -c 3 "8.8.8.8" ls #"'의 문자열을 가지게 된다고 하는데요 #는 주석 처리 아닌가요? 마지막에 왜 붙이는 건가요? 이 문제를 풀때 ls나 cat 명령어를 쓰는데 마지막에 #를 쓰면 답이 보이지만 #를 쓰지 않으면 an error occurred while executing the command라고 오류가 뜹니다. 그 이유가 궁금합니다.

#web
작성자 정보
답변 1
달등불
강의 수강: 1

말씀하시는 #은 주석처리가 맞는 것으로 알고 있습니다.

입력을 받는 입장의 코드를 생각해보면, 우리가 입력하는 코드가 그 줄의 가장 마지막 코드가 아닐 것입니다.
예를 들어, 이런 코드가 있다고 해봅시다.

$sql = "SELECT * FROM heroes WHERE login = '" . $login . "' AND password = '" . $password . "'";

위와 같은 코드는 $login부분을 직접 입력받으므로 다음과 같은 입력값에 취약할 것입니다.

admin' or 1=1--

여기서 뒤에 '--'를 붙여주는 것이 질문의 '#'을 붙이는 것과 같은 이유입니다.
'--'는 sql에서 주석처리를 의미합니다.
이를 뒤에 붙여줌으로서 입력값 뒤에 어떤 코드가 있든 주석 처리해 무효화시키는 것입니다.
그럼 예시에서는 이렇게 되겠죠?

$sql = "SELECT * FROM heroes WHERE login = 'admin' or 1=1--' AND password = '" . $password . "'";
--' AND password = '" . $password . "'";

이 부분은 주석처리되어 아무런 효과를 내지 못할 겁니다.
그리고 앞의 쿼리만 효과를 발휘하게 되겠죠.

SELECT * FROM heroes WHERE login = 'admin' or 1=1
2024.05.29. 19:24
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기