Command injection 질문있습니다~~
진행하다가 ls로 flag.py 파일이 있는것을 확인해서 cat flag.py를 했더니 공백을 사용했더니 에러메시지 창이나오는데 구글에 있는 공백 우회를 쳐도 안되는데 제 방법이 잘못된걸까요??
8.8.8.8";"ls로 했더니 출력이 되었고 pwd같은거도 정상적으로 먹히는것을 확인했지만 공백을 어떻게 해야할지 모르겠습니다.... 팁좀 주세요
#command_injetion
작성자 정보
답변
1
2dedce
워게임 고인물
cmd = f'ping -c 3 "{host}"'
{host}
부분이 8.8.8.8";"ls
일 때 cmd는 ping -c 3 "8.8.8.8";"ls"
가 되고 여기서 "ls"
는 괜찮습니다.
{host}
부분이 8.8.8.8";"cat flag.py
이 된다면 "cat flag.py"
에서 문제가 발생합니다.
우분투 명령어 체계는 <프로그램 주소(인자0)> <인자1> <인자2> <인자3> ...
형식으로 구성되어 있습니다.
이때 <프로그램 주소>
는 /bin/ls
나 /bin/cat
같은 것이 올 수 있고, /bin/
에 있는 프로그램은 앞의 주소를 생략하고 프로그램명만 써도 괜찮습니다($PATH
환경 변수 참고). 만약 프로그램의 이름이나 주소에 띄어 쓰기가 포함된 경우 큰 따옴표 ""
로 묶어서 사용할 수 있습니다. 그러므로 "cat flag.py"
는 flag.py
를 인자로 생각하지 않고 통째로 "cat flag.py"
를 프로그램으로 생각하기 때문에 문제가 발생합니다.
실제로 우분투에 "cat flag.py"
명령을 입력해보면
cat flag.py: command not found
과 같이 오류가 발생합니다.