Command Injection 식별

  • Command Injection은 우선 연산자 주입을 통해 추가 커맨드를 실행할 수 있는지를 확인.
  • 우선 연산자로 커맨드가 실행되는지 확인하면 그 이후엔, 필터링 우회의 영역 (공백, 커맨드 제한 등등)
  • 여러 경우가 발생할 수 있으므로, 다양한 시도가 필요하다
    • curl 바이너리가 없거나, Outbound가 걸려있거나 등등..
    • 테스트에 curl, ping, nc, id 등 사용..
연산자URL-Encode실행 커맨드
;%3b앞 뒤 모두
\n%0a앞 뒤 모두
&%26앞 뒤 모두 (일반적으로 뒷 커맨드 결과가 먼저 출력)
|%7c앞 뒤 모두 (결과는 뒷 커맨드만 출력됨)
&&%26%26앞 뒤 모두 (단, 앞 커맨드가 실행돼야 뒷 커맨드도 실행)
||%7c%7c뒤 (단, 앞 커맨드가 실패한 경우에 뒷 커맨드 실행)
``%60%60앞 뒤 모두 (단, 리눅스 전용)
$()%24%28%29앞 뒤 모두 (단, 리눅스 전용)

dash (sh)

  • / 를 ${PATH:0:1}로 우회하는 방식 사용 불가 (bash 전용).
expr substr "$PATH" 1 1
echo "$PATH" | cut -c1