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

[WEB HACKING] 파일 업로드 우회기법 이용 방법 / 원격쉘 개념 및 종류 / RFI( Remote File Inclusion ) 취약점

by B T Y 2017. 9. 1.
반응형

파일 업로드 우회기법 이용 방법 / 원격쉘 개념 및 종류 / RFI( Remote File Inclusion ) 취약점에 대해서 정리한다.



파일 업로드 우회기법


  - 파일 확장자를 우회하는 방법


  - .htaccess

  - 공격자 파일


  - 한 디렉터리에 존재


    * 여러가지 방법 중 하나의 우회기법일 뿐이고 시나리오는 여러가지로 바뀔수가 있다!!




원격 쉘


1. 웹 쉘


  - php 파일 업로드 취약점을 이용해서 웹쉘에 대한 간단한 개념만을 이해했다.

    * 보통 웹쉘의 경우 파일을 업로드 시켜 웹에서 마우스 클릭만으로 조작이 가능하다.



( 파일 업로드 취약점을 이용해서 웹 쉘의 개념을 간단히 알아보려고 한다... )



( .htaccess는 이미 웹 서버 해당 디렉토리에 저장 되어있기 때문에 attack2.txt 파일만 만들어서 올려주었다.. )



( 파일이 업로드 됬다는것은 해당 웹서버에 업로드 되었다는 말이기 때문에 이제 

웹 쉘을 이용해서 명령을 내릴 준비가 모두 끝났다 )



( $_GET[cmd]를 만들어놨기 때문에 cmd에 값을 이용해서 ls -al이라는 명령어를 주고

system() 함수에 의해서 문자가 아닌 해당 외부 명령을 실행하게 된다.. )



( 웹 쉘은 말 그대로 웹에서 쉘을 따내서 해당 서버를 웹 브라우저로 조작할 수 있다고 보면 된다 )



2. 바인드 쉘


1). 타겟 서버에서 특정 포트를 강제로 오픈


2). 공격자가 강제로 오픈된 포트에 연결



( 바인드 쉘이 되기 위해서는 먼저 타겟 서버에서 특정 포트를 강제로 오픈할 수 있는 방법이 있어야 한다 )



( 여기서는 아까전에 간단한 웹 쉘과 ncat을 이용해서 타겟 서버의 특정 포트를 강제로 열었고 

그 다음에는 클라이언트에서 ncat을 이용해 접속하고 쉘을 따내서 명령을 내릴수 있게 된다 )



    * 방법은 여러가지가 있지만 여기서는 ncat을 이용해서 개념만을 이해했다.

       - 웹쉘을 이용해서 ncat 서버쪽에서 ncat -e /bin/sh -l -p 23232를 실행해서 해당 포트를 연다

         ( 여기서 -e 옵션을 이용했기 때문에 ncat이 실행되면서 해당 프로그램이 실행된다 )


       - 서버에 원격으로 23232포트를 열어두고 클라이언트쪽 역할인 윈도우에서 cmd창을 이용해서

         ncat을 실행해서 해당 서버에 23232포트로 연결하고 명령을 내리게 되면

         /bin/sh가 실행 되어있어서 문자가 아닌 쉘 명령이 실행된다.


    * 해당 포트에 대한 인바운드의 방화벽 룰 설정이 있다면 바인드 쉘을 할 수 없다.



3. 리버스 쉘: 방화벽 우회


1). 공격자가 포트를 미리 오픈


2). 타겟 서버에서 공격자의 포트로 강제로 연결




( 리버스 쉘은 바인드 쉘의 반대개념이라고 생각하면 되고 클라이언트측에서 먼저 포트를 열어주면

서버측에서 그 포트로 접속을 하여 방화벽을 우회하는 방식이다 )


    * 여기서는 서버에서 ncat에 -e 옵션을 사용해서 쉘을 실행하는게 아니라

      리눅스 클라이언트측에서 연결을 할때 -e옵션을 사용해서 /bin/sh을 실행 시켜준다.





RFI( Remote File Inclusion ) 취약점


  - php의 인클루드 기능을 이용한 공격

  - php는 원격 서버에서 있는 php 파일도 인클루드가 가능하다.


     * 원격 서버에서 php 파일을 인클루드가 가능하다는점을 이용해서 해당 경로를 조작하여 자신의 서버에 있는

       파일을 해당 서버에서 실행하도록 만들수 있다.




* /etc/php.ini에서 890 allow_url_include=On 설정을해줘야 외부 파일들에 대한 

  인클루드가 가능해진다.



- RFI( Remote File Inclusion )실습


공격자 서버: 192.168.12.100

타겟 서버: 192.168.12.186




( php 설정파일인 /etc/php.ini에서 allow_url_include 설정을 On 시켜줘야 외부 파일 인클루드가 가능해진다 )



( php 코드를 보면 include "$dir/value.php3"이라고 되어있는걸 보면 외부에서 값을 받아와 

경로를 동적으로 설정해 파일을 인클루드 한다는걸 알 수 있다 )



( 위 그림을 보면 간단하게 dir값이 변조가 가능한걸 볼 수 있다 )



( 로컬 서버에서 php 코드를 작성해서 192.168.12.186 웹서버에서 리눅스 명령어인 ifconfig가 실행 되도록 해보겠다... )



( 위에 보이는것처럼 동적 경로를 가져오는데 그에 대한 값은 임의로 줄 수있기 때문에 이러한 취약점이 발생하게 되었다... )



( 만약 /var/www/html/src 디렉토리안에 value.php3를 만들어놨다면 위 그림처럼 서버로 값을 넘겨줘야한다 )








반응형

댓글