[클라우드 바우처] 80% 할인된 금액으로 드림핵 엔터프라이즈를 도입해 보세요. 자세히 알아보기
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

과 같이 오류가 발생합니다.

2020.10.20. 02:09
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기