[php] - register_globals on 취약점
이 취약점을 설명하기 전에 php 5.4 버전 이후에서는 동작하지 않는다.
해당 옵션이 사라졌기 때문에 실습을 하고 싶다면 php 5.4 이하의 버전에서 실습을 하기 바란다.
==실습환경==
apmsetup 으로 임시 서버를 열어 실습을 진행했다.
php 버전은 5.2 이다.
php.ini 설정 파일에 register_globals 라는 옵션이 있다.
이 옵션을 on 하게 되면 취약점이 발생하게 된다.
-
register_globals = On
이 옵션을 On 하게 되면 GET 또는 POST 방식 등으로 전될 된 모든 변수가 자동으로 php의 변수로 변환이 된다.
코드를 예로 들어 설명하면 아래와 같다.
<?php
if(isset($get)){
echo "success";
}
else{
echo "fail";
}
?>
위와 같은 코드를 작성하고 웹으로 접근을 해보면 당연히 fail 이라는 문구가 출력이된다.
success 문구를 띄우기 위해서 register_globals 이 on 되어 있을때 공격이 가능하다.
위에서 설명했듯이, GET 또는 POST 방식 등으로 전달하면 자동으로 php 변수로 변환이 된다.
따라서 GET 방식으로 ?get=1 이라는 값을 넘기게 되면 아래 사진처럼 success 라는 문구가 뜨는 것을 확인 할 수 있다.
register_globals 옵션이 위험한 이유는 만약 arbitrary code leak 공격이 가능하다면 코드의 흐름을 해석한뒤 get 방식으로 값을 보내어 조건문을 이리저리 통과가 가능해 질 수 있게 될 것이다.
이번에는 CTF 문제를 통해서 설명을 해보겠다.
https://www.wechall.net/challenge/training/php/globals/globals.php
위 사이트에 접속하면 로그인 페이지가 나온다.
힌트로 소스 코드가 주어져 있는데 register_globals 옵션이 on 되어 있으면 쉽게 admin으로 로그인이 가능하다.
아래 노란색으로 칠한 부분을 보면 login[0] 이라는 변수의 값이 admin이면 문제가 풀리게 된다.
따라서 get 방식으로 배열 형태로 값을 보내게 되면 if 문을 통과하게 되어 문제가 풀리게 된다.
?login[0]=admin
이 취약점은 php 5.4 버전 이후로 php.ini 설정에서 사라졌지만, 코드상으로 register_globals 옵션을 사용할 변수에 지정이 가능하다.
알아두면 언젠가 도움이 될까 싶어서 글을 남긴다.
'🔒Security' 카테고리의 다른 글
Paypal에서 발견된 HTTP Request Smuggling 설명 및 예제 (2) | 2019.08.30 |
---|---|
[php] - strcmp를 이용한 취약한 인증절차 (0) | 2019.04.12 |
python을 이용한 beacon flooding attack (0) | 2019.04.06 |
wifi가 보내는 beacon frame 패킷 분석 (0) | 2019.04.06 |
[Network] – tcp 연결 분석 (0) | 2019.04.06 |
댓글
이 글 공유하기
다른 글
-
Paypal에서 발견된 HTTP Request Smuggling 설명 및 예제
Paypal에서 발견된 HTTP Request Smuggling 설명 및 예제
2019.08.30 -
[php] - strcmp를 이용한 취약한 인증절차
[php] - strcmp를 이용한 취약한 인증절차
2019.04.12 -
python을 이용한 beacon flooding attack
python을 이용한 beacon flooding attack
2019.04.06 -
wifi가 보내는 beacon frame 패킷 분석
wifi가 보내는 beacon frame 패킷 분석
2019.04.06