Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Hello Security World

[Web Hacking] Bee - Box -PHP Code Injection- 본문

정보보안/BWAPP Bee-box

[Web Hacking] Bee - Box -PHP Code Injection-

프로앱등이 2020. 5. 3. 18:13

PHP Code INJECTION

 

 

웹 서비스 개발 과정 중 Server Side Langage 등을 include 하는 과정에서 생길 수 있는 취약점

이다 PHP Code Injection 은 exec() 함수나 eval()함수를 사용한 경우 세미 콜론(;) 을 사용하여

다른 함수를 실행하는 취약점이 있다.

 

 

Phpi.php 페이지는 ‘message’ 라는 굵은 글씨를 클릭하면 ‘test’라는 문자열을 출력한다. GET

메소드로 요청하기 때문에 URL에 ‘message’ 라는 변수를 노출한다.

 

url에 있는 ‘message’ 변수에 ‘test’ 가 아닌 다른 문자열을 삽입하면 해당 문자열을 출력하고

있다.

 

 

위의 url 을 확인하면 GET메소드로 전송하고 있다. message 변수에 임의의 문자열을 삽입한

다.

 

 

‘message’ 변수에 “hacking” 이라는 문자열을 삽입하자 “hacking” 이라는 문자열을 출력한다.

그렇다면 공격구문을 삽입해보자.

 

 

취약점을 이용하여 공격 한다. 취약점은 ‘ ; ‘ 세미 콜론과 , ‘ system ‘ 함수를 사용한다.

System 함수는 문자열 형태의 명령어를 인자 값으로 받아서 해당하는 명령어를 실행한다.

 

 

 

‘message’ 변수에 ‘ ; ‘ 세미콜론과 ‘system’ 함수를 이용하여 ‘whoami’ 명령어를 입력하였더니

결과값이 나왔다 ‘whoami’ 명령어는 시스템에 로그인한 사용자의 이름을 출력한다.

 

 

시스템 정보를 획득 하기위해 cat 명령어를 이용하여 /etc/passwd 파일을 열람하여 보겠다

이 뿐 아니라 웹 서버(WWW) 의 Other 권한에 쓰기 , 실행 권한도 있다면 파일을 쓰기 기능

은 물론 모든 명령어를 사용할수 있다.

 

 

‘system’ 함수를 이용하여 ‘cat’ 명령어를 입력하자 /etc/passwd 파일이 출력되었다. 즉, 사용자

의 계정정보가 노출된것이다.

 

 

‘command Injection’ 과 같이 ‘netcat’ 을 사용하면 악의적인 스크립트 파일을 서버로 추가 할

수있다. 칼리리눅스에서 ‘netcat’ 을 이용하여 –l 옵션으로 리스닝 모드로 대기하고 희생자의

피시에서 공격자의 피시로 접속할 포트번호 –p 777 을 오픈한다.

 

 

칼리 리눅스 (공격자) 의 IP address.

 

 

칼리리눅스의 IP(공격자) 를 설정하고 ‘netcat’ 을 실행한다. –e 옵션은 exec 의 줄임말로

옵션에 입력한 프로그램을 실행할 수 있다. ‘/bin/nash’ 를 입력하면 칼리 리눅스에서 명령어

해석기인 bash 셸을 사용한다.

 

 

명령어를 입력하자 웹페이지는 Loading 상태로 전환되고 대기하고 있다. 명령어가 성공적으

로 실행된것이다.

 

 

칼리리눅스에서 ls 명령어를 입력하자 위와 같이 bWAPP서버에 있는 내용들이 출력된다. 정

상적으로 Connection 이 된것이다.

 

 

추가적인 명령어도 입력해보았다 cat 명령어를 이용하여 /etc/passwd 파일의 내용들도 확인할

수있다.

PHP Cod Injection 대응방안

난이도 중과 상에서는 난이도 하와는 다르게 message 변수에 세미 콜론을 사용하여 다른 명

령어를 호출하거나 스크립트 코드를 주입하는 공격이 실행되지 않는다. 코드를 확인하면

난이도 중부터는 다음 코드와 같이 htmlscpeciolchars 함수를 사용하여 message 변수의 입력

값을 필터링한다.