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