본문 바로가기
2. Information Security/3. War Game

웹해킹 24번 (webhacking.kr old 24)

by H232C 2020. 1. 19.

1. 공격유형 : PHP 함수

2. Write up

문제 첫화면 : Client IP와 Agent 정보를 보여주고 있음
View Page Source

😊 코드분석
 - extract 함수 : 이 함수는 array 변수 내에 존재하는 각각의 데이터를 변수화 시켜준다.

- 그림에서 eTest Array 변수를 생성하여 출력한뒤 extract로 변환하면 우측과 같은 결과가 나타나는데
이는 연관 배열 형태의 변수가 extract에 의하여 개별 변수로 이용 가능한 것을 확인할 수 있다.
- 즉 eTest 변수 내의 'test'를 출력할 때 기존 echo $eTest['test']에서 echo $test가 되는 것이다.
- 이후 $ip, $agent 변수에 각각의 값을 지정해 준다 (extract 함수를 안썼다면 $ip= $_SERVER['REMOTE_ADDR']
이런식으로 지정을 해야하지만 $REMOTE_ADDR로 지정이 가능하다.
- IF($REMOTE_ADDR)문을 실행하는데, 문자열 교환이 이루어 진다. (단순 문자열 교환으로 우회 가능)
- IF($HTTP_USER_AGENT)문에서 htmlspecialchar로 필터링을 진행 (공격 포인트와 크게 관계 없음)
- 마지막으로 $ip127.0.0.1로 확인되면 Solve() 실행

🤣 공격 포인트
 - 조작할 포인트 찾기 -> $ip값은 REMOTE_ADDR 값을 받아 지정하는데 이 값을 127.0.0.1로 만들어야 함
 - 조작할 수 있는 포인트 찾기 -> 조작할 수 있는건 오직 헤더값전부이기 때문에 아래와 같이 테스트 수행

User-Agent 값에 ; test=test / Cookie 값에 ; test=test ; HTTP_USER_AGENT = test ; REMOTE_ADDR = test; 삽입


- 위와 같이 공격 테스트한 결과 $_SERVER 변수 내에 삽입 코드는 실행되지 않았으며 $_COOKIE 변수 내에 삽입 코드는 실행되었다. 이 부분은 COOKIE 자체에 삽입이 되는것이 정상인지 취약한건지는 좀 더 서칭 해봐야 할 것 같다.


- Cookie 내에 값이 잘 들어갔다면 코드 순서에 따라 extract 함수가 수행되며 REMOTE_ADDR의 값이 2개가 되어버리는데 하나는 $_SERVER['REMOTE_ADDR'] 값이고 나머지 하나는 $_COOKIE['REMOTE_ADDR'] 값이다.
- 결국 extract 함수가 $_COOKIE 변수를 $_SERVER 변수 보다 나중에 변환 함으로써 $_COOKIE['REMOTE_ADDR'] 값이 $REMOTE_ADDR로 선언되며 이 변수는 곧 $ip 변수로 선언된다.

- 이후 진행되는 문자열 필터링은 단순한 숫자, 문자열 조작으로 우회할 수 있다
- Solve()

🤦‍♂️ 환경을 분석해 보면 $_COOKIE 헤더값에 임의값을 삽입할 수 있으며 이때 서버 사이드에서 $_SERVER, $_COOKIE 처리를 Extract() 함수를 이용한다고 가정하면 $_SERVER 헤더값의 변수들을 임의로 변경할 수 있는 취약점이 생겨서 출발지 IP를 변조할 수 있음

댓글