웹에서 서버 시스템 자체의 데이터를 가공하여 보여줘야 하는 경우가 많다.
이때 직접 개발하는 방법 보다는 시스템 자체의 직접 명령어를 사용해 개발하는 것이 편리하고 빠르다.
예로는 서버 어떠한 경로안에 어떤 파일들이 있는지 웹에 보여줘야 한다면 시스템에서 ls 명령어를 사용하는 것이 좋을것이다.
그래서 웹에 주로 사용되는 언어에서는 아래와 같이 시스템에 내장되어 있는 프로그램을 직접 호출할 수 있는 함수를 지원한다.
PHP = system
Node = child_process
Python = os.system
system("ls -l") 함수를 호출하면 시스템에 ls -l을 한것과 동일한 output을 보여준다.
이 함수에 들어가는 인자값을 제대로 검사하지 않고 사용자 마음대로 넣을 수 있다면 서버에 대한 정보 유출이나 공격을 당할 수 있다.
보통은 메타 문자를 사용하여 공격을 진행하는데, sql injection을 할때 싱글 쿼터나 더블 쿼터 주석을 사용하는것과 비슷하다.
메타문자들은 아래와 같다.
1. 명령어 치환
``과 $()로 사용할 수 있고 문자 안에 있는 명령어를 실행한 결과로 값이 치환 되는 것인데, 차이점으로는 $()를 사용하면 중복으로 사용할 수 있다는 것이다.
2. 명령어 연속실행
한 줄에 여러 명령어를 사용하고 싶을때 사용한다. ||과 &&로 사용할 수 있고
논리적으로 보면 ||는 OR &&는 AND 로 생각하면 된다.
||는 앞 명령어에서 에러가 발생해야 뒷 명령어를 실행한다.
&&은 앞 명령어에서 에러가 발생하지 않아야 뒷 명령어를 실행한다.
3. 명령어 구분자
한 줄에 여러 명령어를 사용하고 싶을 때 사용한다. ;으로 사용할 수 있고 2번과 사용하는 이유는 같지만 ;은 단순히 명령어를 구분하기 위해 사용하며, 앞 명령어의 에러 유무와 관계 없이 뒷 명령어를 실행한다.
4. 명령어 값 사용
앞 명령어의 결과가 뒷 명령어의 입력으로 들어간다. |하나로 사용하고, 명령어 치환과 차이점은 치환은 직접 실행하지만
|하나로는 앞 명령어의 값을 뒤에 명령어로 옮긴다는 차이점이 있다.
ifconfig 문자열을 /bin/zsh를 실행한 뒤에 입력하여 ifconfig 리스트가 출력된것이다.
'Web hacking > 이론' 카테고리의 다른 글
SSRF (web-ssrf) (0) | 2022.10.21 |
---|---|
File Vulnerability (image-storage, file-download-1) (0) | 2022.08.31 |
Blind NoSQL Injection (Mongo) (0) | 2022.08.23 |
비관계형 데이터베이스 Mongo DB, Redis, Couch DB (0) | 2022.08.17 |
SQL injection, Blind SQL injection (0) | 2022.08.17 |
최근댓글