한달 전에 있었던 삼성 CTF의 WEB 문제 중 extract 함수를 이용해 공격하는 부분이 있었다.

이때 extract라는 함수의 존재를 처음 알게 되어서 기록하고자 글을 쓴다.

extract 함수에 $_GET을 인자로 넣으면 ($_POST도 가능) GET으로 넘기는 파라미터와 값을 변수와 그 초기값으로 설정할 수 있다.

아래는 로컬에서 php코드에 extract 함수를 사용한 코드다.


처음에 test란 변수에 guest를 초기값으로 주고 이 test 변수의 값을 출력하는 간단한 코드다.

extract함수에 GET을 인자로 주고 확인해보겠다.


초기값으로 설정된 guest가 출력된다.


하지만 파라미터로 test=admin을 리퀘스트해보았다.

test란 변수에 admin이 들어간게 확인됐다.


extract 함수가 취약하지 않도록 사용되는 경우는 

변수를 선언하기 전에 extract 함수를 사용하거나, 

extract 이후에 다시 변수를 덮어쓰는 코드가 존재하면 공격에 이용되기가 어려워진다.

또한 공격자가 내부 변수명을 알아야 사용이 가능하다는 점과,

EXTR_SKIP이 옵션으로 선언 된다면 취약하지 않다.


+ Recent posts