완료됨
Command injection 질문있습니다~~
진행하다가 ls로 flag.py 파일이 있는것을 확인해서 cat flag.py를 했더니 공백을 사용했더니 에러메시지 창이나오는데 구글에 있는 공백 우회를 쳐도 안되는데 제 방법이 잘못된걸까요??
8.8.8.8";"ls로 했더니 출력이 되었고 pwd같은거도 정상적으로 먹히는것을 확인했지만 공백을 어떻게 해야할지 모르겠습니다.... 팁좀 주세요
#command_injetion
작성자 정보
답변
1
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
과 같이 오류가 발생합니다.