- 해당 페이지는 message를 클릭하면 test가 출력된다.

[캡쳐 1] test

- URL 확인 시 message 파라미터의 값을 출력하는 형식이며, 이를 통해 GET 메소드를 이용한 방식이란 것을 알 수 있다.

[캡쳐 2] GET 방식 데이터 전송

- message 파라미터의 값을 다른 값으로 변경하여 실행할 경우, 변경된 값이 출력되는 것을 확인할 수 있다.

[캡쳐 3] ggonmer

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

exec() 외부프로그램을 실행시켜주는 함수로 쉘 명령어들을 사용할 수 있게 해준다.
eval() 문자열을 PHP 코드로 실행해 준다.
system() 문자열 형태의 명령어를 인자값으로 입력받아 실행시켜 준다.
shell_exec() 문자열 형태의 명령어를 인자값으로 입력받아 실행시켜 준다.

- 해당 페이지에 php 취약점이 존재하는지 유무를 판별하기 위해 세미콜론(;)을 사용해 system()함수를 실행시켜 본다.

[캡쳐 4] system('ls -al')

- 실행 결과 ls -al 명령어의 결과로 파일 목록과 내용을 확인할 수 있다.

[캡쳐 5] cat /etc/passwd

- 사용자 계정 정보를 담고있는 파일인 /etc/passwd의 내용 역시 볼 수 있다.

[캡쳐 6] cat /etc/shadow

- /etc/shadow 파일의 내용은 출력되지 않는 것으로 보아 현재 웹 권한만 가지고 있고, 상위 권한의 사용자만 접근 가능한 파일의 경우 출력되지 않는 것을 알 수 있다. 

- nc 명령을 이용해 공격자의 PC로 연결도 가능하다..

-n 옵션 호스트 네임과 포트를 숫자로 출력
-l 옵션 Listen 모드로 Port 오픈
-v 옵션 더 많은 정보를 볼 수 있음
-p 옵션 포트를 지정

① 먼저 공격자가 NC 명령을 이용해 리스닝 포트를 오픈 후 대기한다.

-e 옵션 연결 생성 뒤 실행 프로그램 지정

② Bee-Box에서 해당 명령을 실행한다.

③ Bee-Box에서 Kali로 연결이 생성 및 공격자의 shell을 획득.

1. PHPUnit이란?

- PHP 프로그래밍 언어를 위한 유닛 테스트 프레임워크
- SUnit과 함께 기원한 유닛 테스트 프레임워크를 위한 XUnit 아키텍처의 인스턴스이며 JUnit과 함께 대중화
- PHPUnit은 Sebastian Bergmann이 개발하였으며 개발 자체는 깃허브에서 호스팅되고 있음

 

2. CVE-2017-9841

[캡쳐 1] https://nvd.nist.gov/vuln/detail/CVE-2017-9841 번역

- 해당 취약점은 /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php에 대한 적절한 인증과정이 없어 발생되는 취약점

 

3. 취약점 분석

- 4.8.28 이전의 버전 및 5.6.3 이전의 5.x PHPUnit에 공격이 가능하다.
- eval-stdin.php에 해당 코드에 의해 취약점이 발생한 것으로 판단된다. php://input 함수를 이용해 원시 데이터를 읽은 후 eval 함수로 해당 명령을 실행하기 때문이다.

[캡쳐 2] 취약점 유발 코드
[캡처 3] 취약점 테스트

- 공격자들은 [캡쳐 3]의 php 코드를 통하여 먼저 취약점이 존재하는지 테스트 후 [캡쳐 4] 방식 등으로 공격을 진행.

[캡쳐 4] RawData

4. 대응방안

1. 최신 버전의 패치를 적용.

[캡쳐 5] 취약점이 패치된 버전의 소스코드

2. 보안 장비에 해당 패턴을 등록하여 탐지 및 차단
( ex) /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php 경로로 요청을 탐지 및 차단 할 수 있도록 룰 설정)
3. .htaccess 파일을 /vendor 폴더에 위치 시킨 후 관련 설정을 등록.
* .htacccess 파일이란 "hypertext access"의 약자로 디렉토리에 대한 접근 허용 여부 등 설정 옵션을 제공한다.

<참고>

 

bWAPP PHP Code Injection

- 해당 페이지는 message를 클릭하면 test가 출력된다. - URL 확인 시 message 파라미터의 값을 출력하는 형식이며, 이를 통해 GET 메소드를 이용한 방식이란 것을 알 수 있다. - message 파라미터의 값을 다

ggonmerr.tistory.com

1. ThinkPHP란?

- 중국기업 탑씽크에서 개발한 아파치2 기반 PHP 프레임워크

- PHP 기본 함수호 구현된 행위들을 객체화해 PHP 개발과정의 유연성과 개발 기간의 단축 등 기능 제공

- 대부분 중국에서 사용중이며 아시아권에서 다수 사용중

[캡쳐 1] 쇼단에서 ThinkPHP 검색 화면

2. CVE-2018-20062

[캡쳐 2] https://nvd.nist.gov/vuln/detail/CVE-2018-20062

- 입력 값에 대한 적절한 검증이 없어 공격자가 임의의 명령을 실행할 수 있는 취약점

3. 취약점 분석

1) 영향 받는 버전

- ThinkPHP 5.0.23 하위 버전

- ThinkPHP 5.1.31 하위 버전

 

2) POC 분석

[캡쳐 3] POC 분석

- POC 구문이 실행되는 이유는 '\' 문자가 필터링되지 않기 때문이며, 크게 3부분으로 나뉠 수 있다.

- 먼저, '\'가 필터링 되지않아 \think\app은 Class로, invokefunction은 함수로 분석이되고,
   call_user_func_array 하위 부분은 함수에 전달하는 인자값이 된다.

[캡쳐 4] https://amuno-note.tistory.com/6

- 즉, 만약 공격자가 call_user_func_array&vars[0]=shell_ecex&vars[1][]=ls 명령을 전송할 경우 

  [캡쳐 4]에 따라 invokefunction('shell_exec','ls')가 수행되어 결과값이 공격자에게 전송되는 것이다.

- 해당 취약점을 이용해 공격자는 wget 명령으로 임의의 주소에서 파일을 다운로드 받게하는 등 다양한 공격이 가능하다.

 

4.  대응 방안

- 최신 버전 업데이트 적용 (2018 12월 보안업데이트 적용_정규표현식에서 '\' 필터링을 통해서 해결)

- 보안 장비에 해당 패턴을 등록하여 탐지 및 차단

 

+ Recent posts