PHP Code Injection 은 php 함수에 악의적인 코드를 삽입하여 정보 수집, 명령어 실행 등이 가능한 취약점이다. 코드 내에 eval() 함수를 이용하여 값을 받고 있을 때, 공격자가 입력한 php 함수들을 인식하여 원하는 함수를 실행할 수 있다.
bee-box 환경에서 실습해보자!
Level - low
message 를 클릭하면 test 라는 내용이 출력된다. 위의 url 을 보면 message 라는 매개변수에 test 라는 값이 들어간 것을 볼 수 있다. 해당 페이지의 소스코드를 보자.
message 의 입력값 부분에 php 함수를 입력해보았다.
test 대신 phpinfo() 를 입력하고 요청한 결과, 함수가 정상적으로 동작하는 것을 볼 수 있다. php 에서 system 함수를 이용하면 다른 명령어를 수행할 수 있다. 이를 이용하여 nc 명령을 이용해 다른 서버에서 원격접속을 시도해보았다.
일단 다른 우분투 서버에 8888 포트를 열어놓았다. 그 다음 해당 페이지에서 Injection 을 수행하였다.
그 결과, 아래와 같이 우분투 서버에서 bee-box 서버에 원격접속된 것을 볼 수 있었다. 명령어도 정상적으로 수행되었다.
Level - medium, high
php 함수들이 수행되지 않고 입력값 그대로 출력되고 있다. 우회 방법을 찾지 못했다.
소스코드 분석
low level 일 때는 eval() 함수를 이용하여 필터링 없이 입력한 값을 받고 있다. 때문에 입력한 함수를 그대로 인식하여 실행될 수 있던 것이다.
medium, high level 에서는 eval 함수를 이용하지 않기 때문에 함수 실행이 불가능하다. 그리고 htmlspecialchars() 를 이용하여 특수문자를 필터링하고 있기 때문에 injection 이 불가능하다.
대응 방안
1. eval() 함수를 사용하지 않는다.
2. htmlspecialchars() 함수 사용
'웹 취약점(bee-box)' 카테고리의 다른 글
XML/XPath Injection(Login Form) (0) | 2020.03.26 |
---|---|
SSI (Server Side Includes) Injection (0) | 2020.03.25 |
OS Command Injection (0) | 2020.03.25 |
iFrame Injection (0) | 2020.03.24 |
HTML Injection - Stored (0) | 2020.03.23 |