[WARGAME] DVWA write-up/ Command Injection / low

jckim22·2022년 10월 18일
0

[WEBHACKING] STUDY (WARGAME)

목록 보기
18/114

아래는 저번에 배웠던 Command Injection 공격이 가능한 취약한 웹페이지이다.

입력한 ip에 ping을 보내는 것 같다.
한번 로컬호스트 ip를 입력 해보았다.
내 서버는 아파치이고 한글 윈도우에서 돌고 있다.
그렇기 때문에 이 웹페이지에서는 한글이 인코딩 되지 않아서 이렇게 깨지는 것을 볼 수 있다.

이번엔 프록시 서버를 키고 버프슈트로 요청 패킷을 인터셉트 해보았다.
아래는 그 요청패킷이다.
POST 방식으로 내 로컬 서버에 /dvwa/vulnerabilities/exec/ 이라는 디렉토리에 요청을 보내고 있다.

직접 들어가보자

아래처럼 그 경로에는 이렇게 난이도마다의 php파일이 있다.

low레벨의 파일을 들여다보니 윈도우와 리눅스를 확인하고 그 각 터미널에서 명령어를 실행한다.
그리고 그 실행결과를 화면에 출력한다.

low레벨의 코드여서 그런지 나의 입력값에 대해서 어떤 필터링도 없는 것을 볼 수 있다.

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
	// Get input
	$target = $_REQUEST[ 'ip' ];

	// Determine OS and execute the ping command.
	if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
		// Windows
		$cmd = shell_exec( 'ping  ' . $target );
	}
	else {
		// *nix
		$cmd = shell_exec( 'ping  -c 4 ' . $target );
	}

	// Feedback for the end user
	$html .= "<pre>{$cmd}</pre>";
}

?>

일단 한국어가 깨지니 불편하므로 구글의 Web Server for Chrome을 이용해서 아래처럼 한국어를 인코딩했다.

그리고 리눅스의 ls명령어를 사용해서 현 디렉토리의 파일들을 보고 싶었는데 내 서버가 윈도우에서 실행되고 있다보니 윈도우 cmd 명령어를 사용해야 했다.

그래서 찾아본 결과 윈도우에서는 ls대신 dir를 사용한다는 것을 알게 되었다.

그리고 &&문자로 명령어를 한줄에 여러개 실행할 수 있다는 것도 알았다.
이후 127.0.0.1 && dir 이라는 명령어를 POST payload값으로 보냈다.

돌아온 응답을 보니 exec디렉토리의 list의 정보를 보여준다.

dir을 여러 옵션으로 사용하면 취약한 파일들을 찾을 수 있고 경로를 조작해 서버의 상위 폴더까지 가는 Path Traversal 공격도 가능한것을 알 수 있다.

이것만으로 큰 위험이라고 볼 수 있다.

나는 py파일을 악성 파일이라고 가정하고 하나 만들어보겠다.
아래처럼 127.0.0.1 && echo print("Hacked") > Hacked.py
라는 명령어를 페이로드로 보내게 되면
그 디렉토리에 print("Hacked") 라는 코드가 실행되는 Hacked.py가 저장될 것이다.
코드가 만약에 복잡한 악성코드였다면 pc는 장악당하기 매우 쉬운 상황인 것이다.

아래처럼 다시 dir를 보게되면 Hacked.py가 만들어진 것을 볼 수 있고

실제로 디렉토리를 GUI환경에서 들어가 봤을 때 Hacked라는 파일이 생긴 것을 볼 수 있다.

악성파일이었고 로컬서버가 아니였다면 정말 위험하고 취약한 환경임을 알 수 있다.

profile
개발/보안

0개의 댓글