본문으로 바로가기

php CodeIgniter index.php 죽이기

category Backend/PHP 2019. 7. 6. 21:05
반응형

php CI index 죽이기


- 환경 -

아파치 2.4.x / CI 3.x / MySQL 5.x / CentOS 7.3

(7.2 보안취약점 발견되었다고함)


https://www.cikorea.net/bbs/view/lecture?idx=7073


이하 버전분들은 위 링크를 참고해주세요 . CI 포럼 웅파님 글입니다.

먼저 httpd (아파치)가 설치된 경로에 환경설정 경로로 이동합니다.

httpd 하위 폴더는 아래와 같이 구성되어있습니다. (글쓴이 기준)

conf conf.d conf.modules.d logs modules run


2.4.x 버전의 아파치는 

cd /etc/httpd/conf.modules.d


경로에 00-base.conf(이름이 다르면 찾아봐야함) 라는 파일이 있습니다.

LoadModule rewrite_module modules/mod_rewrite.so


파일을 vi로 읽어보면 주석제거가 되어있을 것입니다. 만약 주석처리 (#) 되어있다면 제거하고 저장하세요

(혹시나 mod_rewrite가 설치안되어있으면 별도로 설치해야한다고하는데 요즘 아파치는 같이 설치된다)


cd /etc/httpd/conf.d


conf.d 폴더에 vhost.conf 라는 파일을 vi 편집기를 이용하여 생성합니다. (가상호스트 설정할 경우만)


NameVirtualHost *:80
 
<VirtualHost *:80>
        # 웹 프로그램 폴더
        DocumentRoot "루트경로"
 
        # 서버의 관리자 메일주소
        ServerAdmin 메일주소
 
        # 서버이름 (주 도메인)
        ServerName 도메인 IP
 
        # 서버별칭 (부 도메인)
        ServerAlias 도메인 호스트 네임
 
        # 에러로그
        ErrorLog "logs/error_log"
        CustomLog "logs/access_log" common
 
        # 프로그램 구동 옵션
        <Directory "루트경로">
            Options FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>
</VirtualHost>



80포트 가상호스트 설정입니다.

구동 옵션에서 Options FollowSymlinks 를 하지않아도 되는경우 생략해도 됩니다.(아마 필수일지모르지만 보안상 취약한 듯)

AllowOverride All 필수


cd /etc/httpd/conf


위 경로에 있는 httpd.conf를 vi 편집기로 읽습니다.


주석 제거 및 변경해야하는 값

anonymous_enable=NO

anon_upload_enable=NO

anon_mkdir_write_enable=NO

chroot_local_user=YES


추가해야하는 값

allow_writeable_chroot=YES

listen_port=9902

pasv_enable=NO

ftp_data_port=9903


옵션을 수정한 후 :wq 명령어로 저장합니다.

(가상호스트 설정을 안하는 경우 AllowOverride none을 찾아 모두 All로 바꿔주세요 none->All)

위의 설정을 모두 다하고 나면 systemctl restart httpd 명령어로 아파치를 재시작 합니다. (에러가 나는 경우엔 설정이 잘못된 경우)


CI의 config.php 파일에서 아래 설정을 변경해주세요.

//$config['index_page'= 'index.php';
$config['index_page'= '';



CI를 설치한 경로에 보면 application index.php system 등이 있을 것입니다.

위와 같은 경로상에 .htaccess 파일을 아래의 내용을 작성하여 생성한 후 넣어주시면 됩니다.

아래 내용은 복붙해서 사용하세요. 직접 타이핑 하지마세요(바보같이)

<IfModule mod_rewrite.c>
RewriteEngine On
 RewriteBase /
 RewriteCond $1 !^(index\.php|images|captcha|data|include|uploads|robots\.txt)
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>


.은 리눅스에서 숨김파일입니다. .을 붙이고 htaccess 파일이 생성이 되지 않는다면

윈도우에서 메모장을 이용하여 작성하면 될 것입니다. 작성후 ftp나 git을 통해 서버로 전송 하시면 됩니다.


이로써 index.php 죽이기 성공 ~!

(추가적인 에러 사항이 있으시면 댓글 부탁드립니다. 같이 공유해요)


반응형

'Backend > PHP' 카테고리의 다른 글

브라우저 구별법  (0) 2019.10.17
날짜 비교 (stamp)  (0) 2019.07.16
파일 업로드 및 다운로드  (0) 2019.06.26
접근 방지  (0) 2019.06.23
리퍼럴 체크  (0) 2019.06.23