본문 바로가기

bWAPP

[비박스] PHP Code Injection

↓Low level

 

PHP 코드 인젝션 페이지이다.

message부분을 클릭하면 'test'라는 문자열이 출력된다. 또한 URL에 파라미터가 노출되는 것을 통해 GET방식인 것을 확인할 수 있다.

 

따라서 우리는 파라미터의 값을 변조해 원하는 값을 출력할 수도 있다.

 

그렇다면 OS 커맨드 인젝션처럼 시스템 명령의 결과를 출력해볼 수도 있지 않을까?

system 함수를 사용하여 시스템 명령의 결과를 출력해보자.

시스템 명령의 결과인 www-data가 출력된 것을 확인할 수 있다.

whoami 명령어는 시스템에 로그인한 사용자의 이름을 확인할 수 있는 명령어이다.

 

먼저 system함수를 이용한 취약점을 이용할 수 있었던 이유를 알아보자.

phpi.php의 소스코드에서 eval() 함수를 찾아볼 수 있다. eval() 함수란 문자열을 코드로 인식되게 하는 함수를 말하는데

eval() 함수를 사용한 경우 세미콜론(;)을 사용해 다른 함수를 실행할 수 있는 취약점이 존재한다.

따라서 우리는 system함수를 사용해 시스템 명령의 결과를 확인할 수 있었던 것이다.

eval() 함수 외에도 exec() 함수도 마찬가지로 system함수를 이용할 수 있는 취약점이 존재한다.

 

이번에는 넷캣을 이용해 악의적인 스크립트 파일을 서버에 추가해보자.

칼리리눅스를 열어 넷캣을 리스닝모드로 모드로 설정한다.

 

칼리리눅스에서 리스닝모드중인 포트와 연결한다.

 

명령어를 실행해 연결된 것을 확인할 수 있다.

 

우리의 목적은 넷캣을 통해 악의적인 스크립트 파일을 서버에 추가하는것이다.

하지만 넷캣은 터미널과 달리 프롬프트가 없고 vi 편집기 또한 사용할 수 없어 스크립트 파일을 작성할 수가 없는데 pseudo-terminal을 사용하면 터미널처럼 사용할 수 있다.  pseudo-terminal은 단어 그대로 터미널처럼 사용할 수 있는 가짜 터미널을 뜻한다.

다음과 같이 명령어를 입력하게 되면 터미널과 같이 프롬프트가 깜빡 거리는 것을 확인할 수 있다.

 

이제 echo명령어를 이용해 간단한 스크립트 파일을 만들어보자.

다음과 같이 /var/www/bWAPP에 attack.html을 생성한다.

 

attack.html이 생성된 것을 확인할 수 있다.

 

attack.html에 접속하면 다음과 같이 사용자의 쿠키 값이 경고창에 출력되는 것을 확인할 수 있다.

 

Medium level, High level

 

난이도 중과 상에서는 system함수가 먹히지 않는다.

 

phpi.php의 소스코드를 살펴보니 message의 값에 들어 있는 특수문자들이 htmlspeciachars() 함수에 의해 우회되는 것을 확인할 수 있다.

ENT_QUOTES는 크로스 사이트 스크립팅에 사용되는 특수 문자들을 HTML 엔티티 코드로 변환시켜준다.

 

반응형

'bWAPP' 카테고리의 다른 글

[비박스] SSI Injection  (0) 2020.04.22
[비박스] OS Command Injection  (0) 2020.04.14
[비박스] iFrame Injection  (0) 2020.04.13
[비박스] HTML Injection - Stored (Blog)  (0) 2020.04.05
[비박스] HTML Injection - Reflected (POST)  (0) 2020.04.04