본문 바로가기
프로그래밍/WEB HACKING

[WEB HACKING] img 태그를 이용한 CSRF / 서버측 언어를 이용한 취약점( php 파일 업로드 취약점, RFI< Remote File Include > ) / 필터링 우회 / 아파치 웹서버 설정 이해

by B T Y 2017. 8. 31.
반응형

img 태그를 이용한 CSRF / 서버측 언어를 이용한 취약점( php 파일 업로드 취약점, RFI< Remote File Include > ) / 

필터링 우회 / 아파치 웹서버 설정 이해에 대해서 정리한다.




img태그를 이용한 CSRF



! img, iframe, embed, ... 태그를 사용



  - img 태그를 예로 들면 src 속성에 그림이 아닌 주소와 보내려는 데이터를 넣게 되면 서버로 해당 요청이 일어나게

    되면서 만약 해당 img 태그가 걸려있는 게시글에 관리자가 접속하게되면 이미지를 가져와야 되기 때문에 

    서버로 해당 요청을 자동으로 보내게 되면서 해당 요청이 관리자 권한으로 실행이 된다.


( img 태그를 이용해서 제로보드 게시판에 CSRF 실습을 진행하기 위해서 일반회원으로 가입을 했다 )



( 제로보드에서는 해당 회원에게 메세지를 보낼때 GET 방식으로 해당 데이터들을 전송함으로 그 부분을 이용해서

해당 회원의 member_no의 값을 찾아냈다 )



( 해당 페이지 소스 분석을 끝내고 만들어낸 CSRF 공격 데이터를 img 태그 src 속성에 넣어두고 게시글을 작성한다.. )



( 이제 여기서 관리자가 해당 게시물을 클릭하기만 하면 해당 공격은 성공하게 될것이다.. )



( 관리자가 해당 게시물을 클릭하였고 해당 회원의 정보를 확인해보면 레벨이 9에서 1로 변경이 된걸 볼 수 있다 )


* 해당 공격은 img 태그의 특징을 이용해서 게시물을 가져올때 

이미지에 대한 요청을 서버에게 자동으로 한다는 특성을 이용한 공격이다.





2. 서버측 언어를 이용한 취약점


  - 서버에서 실행

  - 서버를 타겟으로 하는 공격 유형


1). php 파일 업로드 취약점


  - 파일 업로드 취약점을 노리기 위해선 2가지 조건이 필요하다.


      1. php 파일을 서버에 업로드 가능

      2. 웹 브라우저를 통해서 접근이 가능

          - 객체에 대한 직접 접근


2). RFI( Remote File Include )


  - LFI( Local File Include )




* 필터링 우회


1. 왜 차단되고 있는가?


  - write_ok.php


  - 파일의 확장자가 .php인 경우라면 차단


2. 꼭 확장자가 .php 이어야 하는가?


  - 웹 서버가 .php 확장자를 가지고 php파일을 식별하기 때문에 그래야 한다.


3. 왜 확장자는 .php로 되어 있는가?


  - /etc/httpd/conf.d/php.conf


  AddHandler php5-script .php

  AddType text/html .php


  * default 설정으로 .php로 되있다.




( 목적은 php 코드가 작성된 파일을 업로드 시켜 해당 자료를 다운 받으려고 클릭했을때 

서버에서 php 코드가 실행되게 하는것이 목적이다 )


* 여러 사용자를 대상으로 했던 클라이언트측 취약점이였던 XSS, CSRF와 다르게 

서버측 취약점은 특정 타겟(서버)을 대상으로 진행이 된다.



( 우선 php 파일이 제로보드 게시판에 올라가지는지 확인을 위해서 업로드를 해봤다.. )



( 여기서 올라가진다면 이 자체로 취약한 부분이기 때문에 php 코드를 악성코드로 작성해서 올리기만 하면 끝날 문제이다... )



( 제로보드에서는 html과 php에 대한 업로드를 막고 있었고 아마도 이걸 처리하는 부분은 write_ok.php에 들어있을 것이다 )


( write_ok.php에서 코드를 보니 php에 eregi()함수를 이용해서 업로드 파일에 대한 확장자 이름을 매칭시켜 

막고 있는 코드가 있었다.. )


* 우회를 할때 정해진 방법은 없지만 이부분을 아파치 웹서버 설정에 대한 특성을 가지고 

우회 해보려고 한다.



! 아파치 웹 서버 설정의 이해



  - /etc/httpd/conf.d/php.conf



( /etc/httpd/conf.d/php.conf를 통해서 아파치에서 php에 대한 설정을 할 수 있는데

여기에는 웹 서버가 php를 인식하는 확장자에 대한 설정도 가능하다.. )



( 웹 서버에서 확장자를 어떻게 인식하는지 알아보기 위해서 간단한 php 코드가 작성된 test.txt 파일을 만들었다 )



( 웹서버에서는 .txt에 들어있는 php 코드를 인식하지 못했고 이러한 설정은 웹 서버 php 설정파일에 default로 .php

확장자일때만 php를 인식할 수 있도록 설정이 되어있기 때문이다 )



( 그렇다면 이 설정에 .txt 확장자를 추가시키고 다시한번 test.txt를 웹 브라우저에서 불러보면 어떻게 될까..? )


( 설정에 의해서 .txt 확장자에 들어있는 php 코드도 인식 하게 되는걸 볼 수 있다 )



1). 아파치 웹 인증


  - /etc/httpd/conf/httpd.conf  ( 글로벌 설정 파일 )


     - 아파치 웹 서버 인증에 필요한 기본적인 코드


      AuthType Basic                                                // 인증 타입

      AuthName "Basic Auth test"                              // 인증 이름

      AuthUserFile /var/www/html/.htpasswd               // 인증 사용자 파일

      Require valid-user                                            // 사용자 인증 후 사용가능


        * 인증된 사용자 파일을 만들때는 htpasswd 명령을 이용해서 만든다.

            ( htpasswd <file_path> <user_name> 이후에 password 입력하면 하나의 사용자 생성 가능 )


              - htpasswd --help 옵션을 사용해서 보면 알 수 있지만 제일 처음 파일을 생성할때는 -c 옵션을 이용한다.



( 각 Driectory마다 설정을 따로 줄 수 있다.. )




( /var/www/html에는 인증 설정이 되있으므로 사용자 인증 없이는 접근이 불가능해졌다 )


* 여기서 인증 사용자는 리눅스 사용자가 아닌 .htpasswd에 등록되어있는 사용자이여야 한다.



( 사용자 인증에 성공하지 못하면 해당 화면이 출력 된다... )



( 사용자 인증을 위해서 /var/www/html 디렉토리에 인증 파일을 만들어 인증 사용자를 추가하려고 한다... )



( 여기서 파일 이름은 꼭 .htpasswd일 필요는 없지만 명령어의 이름과 비슷하게 만들어봤다.. )



( 등록된 user1 사용자로 인증을 했더니 웹 서버에 다시 접근이 가능해진걸 볼 수 있고 

웹브라우저를 종료할때까지 인증은 유효하다.. )



( 여기서도 세션과 같이 사용자 인증을 위해서 개발자도구를 통해 Network쪽에 요청 헤더를 보면 

Basic이라는 인증을 하고 있는걸 볼 수 있다 )


  - .htaccess


    - 설정파일( 로컬 설정 파일 )

   - 파일이 존재하는 디렉터리와 그 하위 디렉터리에 대해서만 설정이 적용

    - 즉, 설정을 적용하고 싶은 디렉터리에 해당 파일을 만들어주기만 하면 된다.


    * 이 안에 들어있는 설정 파일 내용이 꼭 인증에 관한 설정 내용일 필요는 없다!!!


    * 글로벌 설정 파일 338 AllowOverride 설정이 All로 설정 되어있어야 .htaccess를 사용할 수 있다.




( AllowOverride 설정을 All로 주게 되면 로컬 설정파일인 .htaccess를 통해서 

해당 디렉토리와 그 하위 디렉토리의 설정을 제어할 수 있다 )



( 제로보드의 업로드 파일이 저장되는 디렉토리 위치, php설정 파일을 통한 확장자 변경, 

.htaccess 로컬 설정 파일을 통한 현재 디렉토리와 그 하위 디렉토리들의 설정 제어 특징을 통해

php 파일 업로드 취약점을 공략해 볼 수 있다 )


* .htaccess에 꼭 아파치 글로벌 설정에 관련된 설정만 적어야 되는건 아니다!!



( 해당 특징들을 이용해서 php 코드가 들어있는 attack.txt와 웹서버에서 php를 인식할 수 있는 확장자 설정에

.txt도 추가 시킨 설정이 들어있는 .htaccess 파일을 업로드 했고 이 파일들은 현재 웹서버에 올라가 있다 )


* 정확히 말하자면 ./zboard/data 디렉토리 안에 두 파일이 모두 업로드 되어있고 그렇다는건 

이미 해당 디렉토리와 그 하위 디렉토리에는 .htaccess에 들어있는 설정이 적용됬다는걸 의미한다.



( attack.txt를 다운받으려고 클릭했을때 그 안에 있는 해당 php 코드가 실행이 되어서 

'Hello, php'라는 문구가 출력 되는걸 볼 수 있다 )












반응형

댓글