이용자의 입력을 시스템 명령어로 실행하게 하는 취약점
명령어를 실행하는 함수에 이용자가 임의의 인자를 전달할 수 있을 때 발생
이용자의 입력을 제대로 검사하지 않으면 임의의 명령어 실행될 수 o
왜냐하면 리눅스 셸 프로그램이 다양한 메타 문자를 지원하기 때문
명령어 치환1 ``:안에 들어 있는 명령어를 실행한 결과로 치환
$ echo `echo theori` theori
명령어 치환2 $(): $()안에 들어있는 명령어를 실행한 결과로 치환, 중복 사용 가능
$ echo $(echo theori)theori
(echo $(echo $(echo theori)))
명령어 연속 실행 &&: 한 줄에 여러 명령어 사용하고 싶을 때 사용
$ echo hello && echo theori hello theori
명령어 연속 실행 ||: 한 줄에 여러 명령어 사용하고 싶을 때 사용
$ cat / || echo theori cat: /: Is a directory theori
명령어 구분자 ; : 한 줄에 여러 명령어 사용하고 싶을 때 사용
$ echo hello ; echo theori hello theori
파이프 | : 앞 명령어의 결과가 뒷 명령어의 입력으로 들어갈 때 사용
$ echo id | /bin/sh uid=1001(theori) gid=1001(theori) groups=1001(theori)

사보개에서 ping에 대해 배운 후 ping만 보면 반갑다
즐거운 마음으로 풀어야지..

host에 ping을 쏠 수 있다 하핫
8.8.8.8을 ping! 해보면

3개의 패킷이 잘 전송되었다고 한다.
근데 갑자기 생각난건데 전에 이 문제를 시도한 적이 있는 것 같다.. 개발자 도구 가서 pattern을 바꿔줬던 것 같다. 왜냐면 계속 패턴에 맞게 입력하라고 해서;;
pattern을 없애주고
모든 파일을 확인해주려고
0.0.0.0;ls를 해주었더니
an error occurred while executing the command. -> ping -c 3 "0.0.0.0;ls" 이런 오류가 떴다.
큰따옴표를 잘 맞추어줘야지
0.0.0.0";"ls
으로 ping을 쏴주니까

플래그가 들어있다는 flag.py가 보인다.
이제 flag.py를 출력하기 위해 파일 내용을 출력해주는 cat 명령어를 사용할 것이다.
큰따옴표를 조심해서 작성해주자
8.8.8.8";cat flag.py"를 해주니까

flag가 잘 출력되었다.