PHP 코드 인젝션?

웹 애플리케이션을 통해서 PHP 코드를 입력하면, 웹 애플리케이션의 입력을 정상적으로 인식하여 개발자가 의도한 바와 다르게 내부에 있는 PHP 코드를 실행하는 기법이다.
모르면 직접 해보도록 하자.


    실습

PHP로 이동하고

위와 같은 내용이 뜬다.
저기서 message...는 하이퍼링크이다. 일단 눌러보자.


이제 척하면 감이 온다.

우리가 해야하는 것은 PHP 인젝션이므로 message파라미터에 PHP 함수를 쓴다면 ??
pwd명령을 불러와 보자.

입력할 명령어는 system("pwd");

바로 결과가 뜬다.
그런데 왜 2개가 뜨는건지는 소스코드를 봐야할 것같다.

(가독성을 위해 Bee-Box서버의 소스코드를 notepad++로 옮겨온 것)
위가 메인 소스코드이다.

빨간사각형은 Low레벨, 파란사각형은 Medium, High레벨의 함수이다.

Low레벨의 소스코드를 해석해보면
php코드를 실행시키는 eval함수를 사용하는데, echo [message파라미터값];
이렇게 끝나게 된다.

내가 message값으로 system("pwd")를 주었기 때문에
실행되는 php코드는 echo system("pwd");가 된다.
값이 2번 출력되는 이유는 우선 system("pwd")함수를 통해 pwd의 결과를 출력하고,
그 결과를 echo함수가 또 출력해주는 식이라 2번 출력이 되는 것이다.


    보안방법

위에 그림을 또 재탕해서(..) 파란사각형에 있는 내용이 보안방법이 되겟다.
htmlspecialchars함수를 통해 필터링과정을 거친다.
htmlspecialchars함수에 있는 2번째 파라미터에 ENT_QUOTES가 있는데, 이 녀석의 역할은 XSS(Cross Site Scripting)에 사용되는 특수문자들을 HTML문자로써만 인식하게 만든다.


    공격 시나리오

공격자PC(192.168.80.134) 칼리리눅스에 netcat모드를 1234포트를 이용하여 listen상태로 만들어둔다.
netcat에 대한 설명은 생략하겠다. 찾아보면 금방나온다.


바로 브라우저에 입력값을 아래와 같이 입력한다.


그리고 아까의 터미널로 돌아가면

이렇게 자유롭게 bash쉘을 쓸 수 있는 것을 볼 수 있다.
여기까지 우리는 Bee-Box의 쉘을 따낸것이라고 보면된다. (root는 아니지만)

여기서 파일을 생성과 삭제를 하거나 백도어를 심음으로써 지속적으로 Bee-Box서버를 괴롭힐 수 있게된다.

나는 예시로 파일을 만들어 보았다.

빨간색사각형이 필자가 입력한 명령어
이제 브라우저 들어가서 직접 찾아가면..

예상대로 조건부로 서버를 주물럭거릴수 있게되었다.


'Penetration Testing > Bee-Box' 카테고리의 다른 글

PHP - addslashes 함수  (0) 2018.02.21
[Bee-Box] SSI 인젝션  (0) 2018.02.21
[Bee-Box] OS 커맨드 인젝션  (0) 2018.02.14
htmlspecialchars 함수에 대해  (0) 2018.02.13
[Bee-Box] iframe Injection  (1) 2018.02.13

+ Recent posts