반응형

1. open_basedir 지시어란?

 - open_basedir란 설정된 디렉토리 및 하위 디렉토리에서만 파일을 열 수 있도록 제한하는 지시어이다.

 - 상세한 설정 및 이에 따른 설명은 아래 [2. 세팅 방법]에서 다루도록 하겠다.



2. 세팅 방법

 - 필자는 CentOS 6.0 기준으로 작성하였다. 다른 버전의 경우 검색을 통해 알아보길 바란다.

 

- vi /etc/httpd/conf/httpd.conf


- 아래 내용 추가 후 저장

<Directory /var/www/html/test/*>

<IfModule php5_module>

php_admin_value open_basedir  /var/www/html/test:/tmp

</IfModule>

</Directory>


- service httpd restart


여기서 php_admin_value 옵션은 ini_set() 혹은 set_include_path()와 같은 방법으로 어플리케이션에서 직접적으로 설정 정보를 변경하지 못하도록 하는 옵션이다.


open_basedir로 경로를 설정할 때 : 를 기준으로 여러 디렉토리를 설정해줄 수 있으며 어플리케이션 경로 및 세션 정보와 파일 업로드 시 필요한 tmp 디렉토리만 설정해준다.

이렇게 설정해줄 경우 Directory에 표기된 /var/www/html/test/ 하위에 정의된 파일들은 open_basedir에 설정된 /var/www/html/test 를 벗어나 상위 디렉토리에 접근할 수 없다.


설정 후 httpd service를 restart해주면 적용이 완료된다.


(참고) php.ini에서도 open_basedir 설정이 가능하다.



3. open_basedir 우회

 - 올해 3월달에 @Blaklis_ 라는 분께서 open_basedir이 설정되어있을 때 우회하는 PoC를 공개하였다.


 - 그리고 이에 대한 상세한 설명 및 방법은 shpik 님께서 블로그에 잘 정리해 놓으셨다. 

https://blog.shpik.kr/2019/PHP_Open_basedir_Bypass/ )

 - 개인적으로 테스트를 해보며 첨언을 하자면 위에 내가 세팅한 방법인 httpd.conf 파일에 세팅하는 경우에는 위의 방법으로 우회가 되지 않는다. 왜냐하면 php_admin_value 옵션이 들어가있기 때문이다. 위의 경우는 php.ini 파일에서 open_basedir을 설정하였을 경우 우회되는 방법이다.


- 추후 관련 CTF가 출제될 수 있으므로 Final payload만 저장해둔다.

http://91.121.31.50/phuck3/?eval=chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');echo(file_get_contents('flag'));


※ 참고

 - https://idchowto.com/?p=22531

 - https://ma.ttias.be/php-php_value-vs-php_admin_value-and-the-use-of-php_flag-explained/


반응형

'Hacking > Web' 카테고리의 다른 글

PHP wrapper  (0) 2020.03.02
JWT Signature - RS256 to HS256  (3) 2020.02.27
Sqlite Sql Injection Prevention  (0) 2019.12.30
HTTP 인증 우회  (0) 2019.12.16
데이터 평문전송 대응방안  (2) 2019.12.06
블로그 이미지

rootable

,